// ==UserScript==
// @name         米黄脚本2.0.1
// @namespace    https://greasyfork.org/en/scripts/408587
// @include      *://*cadency.trintech.com/Certification/JEPrep/*
// @version      2.0.1
// @description  快速填写JE所需信息。
// @author       JunYi
// @match        https://rockwell.cadency.trintech.com/
// @grant        unsafeWindow
// @grant        GM_addStyle
// @require      file://C:\Users\mhuang3\Desktop\SheetJS\sheetjs-master\dist\xlsx.core.min.js
// @require      https://code.jquery.com/jquery-3.5.1.min.js
// ==/UserScript==



// 淡色 #54565a
// 灰色 #333
GM_addStyle(`
    .mainBox { background-color:#fff; position:absolute; box-shadow:0px 0px 5px #333; border-radius:25px; }
    .mCircle { background-color : #fff; position : absolute; height : 50px; width : 50px; right : 50px; border-radius : 50px; box-shadow : 0px 0px 5px #333; z-index : 9999999;text-align : center;color : #333; line-height : 50px;user-select : none;opacity : 0.5;transition: all 0.3s;}
    .mCircle:hover { -webkit-transform: scale(1.2);color: #fff;background-color: #54565a;opacity : 1;cursor : pointer;}
    .mCircleSelected { -webkit-transform: scale(1.2);color: #fff;background-color: #54565a;opacity : 1;cursor : pointer;}
    .closeBtn { position: absolute;font-size: 15px;font-weight: 700;top: 0;right: 10px;width: 30px;text-align: center;height: 30px;line-height: 30px;font-family: mFontFamily;color: #fff;margin: 0;cursor: pointer; user-select: none;}
    .closeBtn:hover { color: #54565a; }
    .mBtn { background:#fff; position:absolute; height:50px; width:50px; bottom:-15px; border-radius:25px; box-shadow:0px 0px 5px #333; cursor:pointer; z-index:9999999; text-align:center; color:#333; line-height:50px; user-select:none; }
    .mCheck { position:absolute; font-style: normal; top:5px; right:30px; font-size:10px; height:15px; width:15px; line-height:15px; text-align:center; font-weight:700; cursor:pointer; user-select:none; }
    .mText { font-style: normal;height: 20px;line-height: 20px;font-size:11px;user-select:none; }
    .msg { display:none; position:absolute; background-color:#fff; border-radius:25px; box-shadow:0px 0px 5px #333; z-index:9999999; opacity:0; }
    .icon { display:inline-block; height:30px; width:30px; line-height:30px; text-align:center; color:#fff; font-weight:700; border-radius:15px; margin-left:50px; }
    .mLi { position: relative; list-style: none; margin-top: 10px; }
    .mInput { width: 100px; float: right; margin-right: 50px; font-size: 12px; height:22px; line-height:22px; border-radius:5px; outline-style:none; border:1px solid #ccc; padding-left:5px; }
    .tabButton { position:absolute; display:inline-block; top:135px; left:57px; width:100px; height:30px; line-height:30px; color:#333; text-align:center; background-color:#fff; box-shadow:0 0 3px #333; border-radius:30px; cursor:pointer; }
    .tabButton:hover { color:#fff; background-color:#54565a }
    .settingTabBtn { display:inline-block; position:absolute; text-align:center; height:30px; width:100px; line-height:30px; left:50px; font-weight:700; border-radius:30px; cursor:pointer; }
    .settingTab { display:none; position:absolute; height:420px; width:620px; left:200px; top:60px; border-radius:20px; padding:20px 20px; box-shadow:0px 0px 3px #333; }

    .mainBox2 { opacity:0.9; cursor:move; }
    .mText2 { color:#fff; }
    .mTitleBox2 { display:none; } 
    .mUl2 { margin-top:20px }
    .settingTab2 { box-shadow:0 0 3px #fff; }
    .tabLi2 { color:#fff; }
    .versionBox2 h1,.versionBox2 h2 { color:#fff!important; }
    .versionBox2 h3,.versionBox2 h4,.versionBox2 ul li { color:#fff; }
`);


javascript: (function() {

    // .mCircle:hover { top: 280px!important;height : 60px;width : 60px;line-height : 60px;right : 45px;color: #fff;background-color: #54565a;opacity : 1;}
    // unsafeWindow - 意思是可以调用网页原生的函数
    // CT根据借贷金额判断
    // 设置 - 颜色，保存移动位置，设置CC，提示框消失时间，填写清空是否提示，调整Sheet宽度

    // 和自己的currency不同时提示

    // 检测Trintech网页状态。

    // 填写的时候同时填写JE Name（强制填写）。
    // LongText：LongText框失去焦点后会将内容保存到内存，上传File时会填写修改后的数据。
    // 上传：由于copy的JE结构与新建的不同，脚本会阻止上传功能的使用，需要手动贴底部的单元格。
    // 上传：上传功能在non-SAP的JE模板也不会被触发。


    var version = '2.0.0';
    var mName = '米黄脚本' + version;
    var lastUpdateDate = '2020/10/6';

    // 从localStorage中获得数据

    var allData = localStorage.getItem('mhData');;
    var dataDic = {}; // 空字典/对象
    loadData();


    var companyCode = getData('companyCode');
    companyCode = companyCode ? companyCode : '5003'; // 默认5003

    var documentType = ''; // 根据是否有Reversal Period Box来自动判断
    var documentCurrency = 'USD'; // 根据conpanyCode自动匹配

    var preparerCostCenter = getData('preparerCostCenter');
    var preparerCostCenterDefault = '89031';
    preparerCostCenter = preparerCostCenter ? preparerCostCenter : preparerCostCenterDefault; // 默认89031

    var longText = '';
    var shortText = longText.substring(0, 16);

    var postingDate = getData('postingDate');
    postingDate = postingDate ? postingDate : '2020/7/31'; // 默认2020/7/31

    var reversalDate = ''; // 根据postingDate自动计算

    var reversalDay = getData('reversalDay');
    var reversalDayDefault = '10';
    reversalDay = reversalDay ? reversalDay : reversalDayDefault; // reversal日默认是第二个月的10号

    var controlTotal = 'CT 1'; // 默认CT1 不储存
    var ownership = 'GFO'; // 默认BFO 不储存

    var mFontFamily = getData('mFontFamily');
    var mFontFamilyDefault = 'Microsoft YaHei';
    mFontFamily = mFontFamily ? mFontFamily : mFontFamilyDefault; // 'Calibri,Microsoft Yahei'

    var mColor = getData('mColor');
    var mColorDefault = '#333333';
    mColor = mColor ? mColor : mColorDefault; // '#005261'

    var mColorCorrect = getData('mColorCorrect');
    var mColorCorrectDefault = '#99cc66';
    mColorCorrect = mColorCorrect ? mColorCorrect : mColorCorrectDefault; // 绿色

    var mColorError = getData('mColorError');
    var mColorErrorDefault = '#CC3333';
    mColorError = mColorError ? mColorError : mColorErrorDefault; // 红色 #CC3333 #cc0001

    // 设置相关数据
    var mTop = getData('mTop');
    var mTopDefault = '260px';
    mTop = mTop ? mTop : mTopDefault; // 默认顶部距离

    var mRight = getData('mRight');
    var mRightDefault = '135px';
    mRight = mRight ? mRight : mRightDefault; // 默认靠右距离

    var mMsgDisappearTime = getData('mMsgDisappearTime');
    var mMsgDisappearTimeDefault = 2;
    mMsgDisappearTime = mMsgDisappearTime ? mMsgDisappearTime : mMsgDisappearTimeDefault; // 默认2秒
    var mWaitTime = parseInt(mMsgDisappearTime); // 转化为数字

    var autoInput = getData('autoInput'); // 自动填写信息
    autoInput = autoInput ? autoInput : true; // 默认false
    autoInput = autoInput == 'false' ? false : autoInput;

    var overWrite = getData('overWrite'); // 覆盖填写
    overWrite = overWrite ? overWrite : false; // 默认false
    overWrite = overWrite == 'false' ? false : overWrite;

    var protectData = getData('protectData'); // 保护数据 - 有数据就不能自动填写
    protectData = protectData ? protectData : true; // 默认true
    protectData = protectData == 'false' ? false : protectData;

    var showInformation = getData('showInformation'); // 显示介绍框
    showInformation = showInformation ? showInformation : true; // 默认true
    showInformation = showInformation == 'false' ? false : showInformation;

    var forceFill = getData('forceFill'); // 当JE Name中不存在companyCode时，强制填写为上一笔JE的companyCode
    forceFill = forceFill ? forceFill : true; // 默认true
    forceFill = forceFill == 'false' ? false : forceFill;

    var showMain = getData('showMain'); // 显示主面板
    showMain = showMain ? showMain : true; // 默认true
    showMain = showMain == 'false' ? false : showMain;

    var confirmDelay = 200; // 确认框弹出/消失/点击确认的延迟时间（毫秒）

    var autoOpenUploadFile = getData('autoOpenUploadFile'); // 显示主面板
    autoOpenUploadFile = autoOpenUploadFile ? autoOpenUploadFile : true; // 默认true
    autoOpenUploadFile = autoOpenUploadFile == 'false' ? false : autoOpenUploadFile;

    var showVersion = getData('showVersion'); // 显示的版本主题，默认选择2.0版本
    var showVersionDefault = '2';
    showVersion = showVersion ? showVersion : showVersionDefault;

    // JE相关
    var mJESheetIndex = getData('mJESheetIndex'); // JE名称
    mJESheetIndex = mJESheetIndex ? mJESheetIndex : 'JE'; // 默认名称 - JE
    if (/^\d{1,}$/.test(mJESheetIndex)) {
        mJESheetIndex = parseInt(mJESheetIndex); // 如果是正整数，转化为数字
    }

    var mJEStartRow = getData('mJEStartRow'); // 起止行
    mJEStartRow = mJEStartRow ? mJEStartRow : 11; // 默认第11行
    mJEStartRow = parseInt(mJEStartRow);

    // 数据收集相关
    var mCollecAutoFill = getData('mCollecAutoFill'); // 成功使用自动填写的次数
    mCollecAutoFill = mCollecAutoFill ? parseInt(mCollecAutoFill) : 0;
    var mCollecAutoClear = getData('mCollecAutoClear'); // 使用清空的次数
    mCollecAutoClear = mCollecAutoClear ? parseInt(mCollecAutoClear) : 0;
    var mCollecAutoReset = getData('mCollecAutoReset'); // 使用重置的次数
    mCollecAutoReset = mCollecAutoReset ? parseInt(mCollecAutoReset) : 0;
    var mCollecAutoInput = getData('mCollecAutoInput'); // 成功使用上传的次数
    mCollecAutoInput = mCollecAutoInput ? parseInt(mCollecAutoInput) : 0;
    var mCollecOpenSetting = getData('mCollecOpenSetting'); // 打开设置的次数
    mCollecOpenSetting = mCollecOpenSetting ? parseInt(mCollecOpenSetting) : 0;

    // 错误数量
    var mError = 0;

    // 当前打开着的窗口
    var openWindow = [];

    var currencyMapping = {
        '0016': 'JPY',
        '0135': 'VND',
        '0347': 'CNY',
        '5021': 'CNY',
        '5002': 'CNY',
        '5000': 'AUD',
        '5003': 'CNY',
        '5004': 'CNY',
        '5006': 'CNY',
        '5007': 'HKD',
        '5008': 'INR',
        '5010': 'KRW',
        '5011': 'MYR',
        '5012': 'NZD',
        '5013': 'PHP',
        '5014': 'USD',
        '5015': 'USD',
        '5016': 'TWD',
        '5017': 'THB',
        '5018': 'USD',
        '5019': 'IDR',
        '5023': 'CNY',
        '7503': 'CNY',
        '7508': 'INR',
    };

    var ctMapping = {
        'CT 1': 'Less than 1M USD',
        'CT 2': '1M to 2M USD',
        'CT 3': 'More than 2M USD'
    };

    var monthMapping = {
        'Jan': 1,
        'Feb': 2,
        'Mar': 3,
        'Apr': 4,
        'May': 5,
        'Jun': 6,
        'Jul': 7,
        'Aug': 8,
        'Sep': 9,
        'Oct': 10,
        'Nov': 11,
        'Dec': 12,
    }


    // 所需三方文件
    // 所需三方文件
    // 所需三方文件


    // 所需三方文件
    // 所需三方文件
    // 所需三方文件













    // 各种盒子 - SAP
    var periodBox = $("#Period option:selected"); // 根据数据自动判断  
    var reversalPeriodBox = $("#ReversalPeriod");
    var nameBox = $("#Name");

    var companyCodeBox = $("#baseheader_d4137e0c-a437-49a6-8b2c-0a0e6b09e3ee");
    var documentTypeBox = $("#detailheader_ecde07c7-5d82-4406-a222-a4d0010f574c");
    var documentCurrencyBox = $("#detailheader_4f54f35e-c0ff-4a94-83ac-a46e0112442c");
    var preparerCostCenterBox = $("#detailheader_52d955e7-ca17-4689-9270-a4f400db31ee");
    var ownershipBox = $("#detailheader_377b988a-42a7-4a2e-ad80-a4f700a59a0a"); // readonly 
    var referenceBox = $("#detailheader_69234d49-9a22-4e1a-81b9-a4df00f02bc1");
    var adHocJudgmentalBox = $("#detailheader_4a1398cf-1004-4929-9f09-a4d001128f5b");

    var postingDateBox = $("#baseheader_e954c74e-f1c5-4b45-89fe-a46e01124419"); // SAP和non-SAP共用
    var documentDateBox = $("#detailheader_fbd595aa-4570-4d7f-a6df-a4d00112acc6");
    var translationDateBox = $("#detailheader_12b345f4-e5fe-40f8-aa43-a4df00efe030");
    var reversalDateBox = $("#baseheader_2bd855a7-6d60-41cc-8333-a46e0112442c");
    var controlTotalBox = $("#detailheader_d1f641fd-05d3-4ec7-b868-a4fb009d8d84");
    var ctDescriptionBox = $("#detailheader_aea737c3-cf63-4f16-9c15-a50f009de668"); // readonly 
    var jeDescriptionBox = $("#detailheader_50993ab5-3add-4924-8f8a-a4df00faebb1"); // SAP和non-SAP共用

    // 各种盒子 - NonSAP
    var nonSAPLocationBox = $("#detailheader_02fb3f29-8c29-412d-a656-a71b00edf360");
    var entryCurrencyBox = $("#detailheader_6ca1d8e1-c1a1-4915-8ea6-a71b00ff1443");
    var documentNoBox = $("#detailheader_4e5c54ab-23d4-4304-ae9a-a71c00d73f19");



    // 插件UI
    var prepareArea = $("#PrepWrapper");
    // 左上角logo
    var trintechName = $("#processDropdown");
    // Journal Entry Details 没用的一行
    var trintechHeader = $("#PageHeader");
    // 按钮区背景
    var trintechButtonArea = $(".entry_buttons");
    // 按钮区ul
    var trintechButtonUl = $("#JEPrepMenu");
    // 下边单元格区域
    var trintechSheetArea = $("#JEPrepScroll");




    // 右边的几个圆圈
    let circleTop = 280;
    var mMainBoxCircle = $("<div class = 'mCircle mainBoxCircle'>主面板</div>");
    mMainBoxCircle.css("top", circleTop + 60 * 0 + "px");
    mMainBoxCircle.click(function() {
        if (showMain) {
            hideMainBox();
        } else {
            showMainBox();
        }

    });

    var mUploadInput = $('<input type="file" id="file" style="display:none;" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/xls"></input>')
    var mUploadCircle = $("<div class = 'mCircle mUploadCircle'>上传</div>");
    mUploadCircle.css("top", circleTop + 70 * 1 + "px");
    mUploadCircle.click(function() {
        let system = companyCodeBox.length ? 'SAP' : 'non-SAP';
        if (system == 'SAP') {
            selectFile();
        } else {
            showMsg('仅SAP模板下可以使用这个功能。', false);
        }
    });

    var mSettingCircle = $("<div class = 'mCircle mSettingCircle'>设置</div>");
    mSettingCircle.css("top", circleTop + 70 * 2 + "px");
    mSettingCircle.click(function() {
        showSetting(0);
    });

    prepareArea.append(mMainBoxCircle);
    prepareArea.append(mUploadInput);
    prepareArea.append(mUploadCircle);
    prepareArea.append(mSettingCircle);


    // 主界面 装所有按钮的大盒子 高度自动变化
    var mBox = $("<div class='mainBox'></div>"); // 装所有按钮的大盒子
    prepareArea.append(mBox);
    mBox.css({
        display: "none",
        width: 400,
        right: mRight,
        top: mTop,
        zIndex: 9999999,
        fontFamily: mFontFamily,
    });


    // 提示框
    var msgBox = $("<div class='msg' style='height:70px;width:auto;user-select:none;'></div>");
    prepareArea.append(msgBox); // 先添加（透明度0）

    var msgIcon = $("<div class='icon iconCorrect'></div>");
    msgBox.append(msgIcon);

    var msg = $("<span style='margin-left:10px;margin-right:50px;height:70px;line-height:70px;'></span>");
    msgBox.append(msg);


    // 各种框开打时，黑色的背景
    var cover = document.createElement('div');
    cover.className = 'cover';
    prepareArea.append(cover);
    cover.style.position = 'absolute';
    cover.style.display = 'none'; // 刚开始消失
    cover.style.top = '0';
    cover.style.left = '0';
    cover.style.height = '1200px';
    cover.style.width = '100%';
    cover.style.backgroundColor = 'black';
    cover.style.opacity = '0';
    cover.style.zIndex = '9999999';

    // 确认框
    var confirmBox = $("<div class='msg cfmBox' style='display:none;height:120px;user-select:none;'></div>");
    prepareArea.append(confirmBox); //  先添加（透明度0）

    var confirmIcon = $("<div class='icon' style='margin-left:100px;background-color:" + mColor + ";'>?</div>"); // 确认框里的？圆圈
    confirmBox.append(confirmIcon);

    var confirmMsg = $("<div style='display:inline-block;margin-left:10px;margin-right:100px;text-align:center;height:120px;line-height:120px;'></div>"); //  确认消息
    confirmBox.append(confirmMsg);

    var doWhat = ''; // foncirm做什么

    var btnConfirm = $("<div class='mBtn' style='right:90px;top:90px;'>确认</div>"); // 确认按钮
    confirmBox.append(btnConfirm);
    btnConfirm.click(function() { confirmConfirm() });

    var btnCancel = $("<div class='mBtn' style='right:30px;top:90px;'>取消</div>"); // 取消按钮
    confirmBox.append(btnCancel);
    btnCancel.click(function() { closeConfirm() });



    // 更新提示框 user-select 文字不能选中
    var versionBox = $("<div class='msg versionBox' style='position;fixed;height:600px;width:1150px;user-select:none;box-shadow:0px 0px 5px #333;'></div>");
    prepareArea.append(versionBox);

    var versionTitleBox = $("<div class='versionTitleBox' style='position:relative;background-color:" + mColor + ";height:30px;width:100%;border-radius:23px 23px 1px 1px;margin:0;box-shadow:0px 1px 8px #333;'></div>");
    versionBox.append(versionTitleBox);

    var versionTitle = $("<h1 style='display:inline-block;font-size:12px;text-align:center;height:30px;line-height:30px;width:100%;font-family:" + mFontFamily + ";color:#fff;margin:0;'>版本信息</h1>");
    versionTitleBox.append(versionTitle);

    var versionCloseBtn = $("<span class='closeBtn' style='font-family:" + mFontFamily + ";'>-</span>");
    versionTitleBox.append(versionCloseBtn);

    versionCloseBtn.click(function() {
        closeVersionBox();
    });
    var versionShowArea = $("<div></div>");
    versionBox.append(versionShowArea);
    versionShowArea.css({
        position: "absolute",
        width: parseInt(versionBox.css("width")) - 200,
        height: parseInt(versionBox.css("height")) - 100,
    });
    versionShowArea.css({
        top: 30 + (parseInt(versionBox.css("height")) - 30 - parseInt(versionShowArea.css("height"))) / 2,
        left: (parseInt(versionBox.css("width")) - parseInt(versionShowArea.css("width"))) / 2,
        overflow: "overlay",
    });
    var versionHistortText = $("<p style='font-family:" + mFontFamily + ";'></p>");
    versionShowArea.append(versionHistortText);
    versionHistortText.html("");



    // 设置框
    var settingBox = $("<div class='msg settingBox' style='position:fixed;height:550px;width:900px;user-select:none;box-shadow:0px 0px 5px #333;'></div>");
    prepareArea.append(settingBox);

    var settingTitleBox = $("<div style='position:relative;background-color:" + mColor + ";height:30px;width:100%;border-radius:23px 23px 1px 1px;margin:0;box-shadow:0px 1px 8px #333;'></div>");
    settingBox.append(settingTitleBox);

    var settingTitle = $("<h1 style='display:inline-block;font-size:12px;text-align:center;height:30px;line-height:30px;width:100%;font-family:" + mFontFamily + ";color:#fff;margin:0;'>设置</h1>");
    settingTitleBox.append(settingTitle);

    var settingCloseBtn = $("<span class='closeBtn' style='font-family:" + mFontFamily + ";'>-</span>");
    settingBox.append(settingCloseBtn);

    settingCloseBtn.click(function() {
        closeSetting();
    });

    // 标签选项
    var settingTabBtn_Base = $("<div class='settingTabBtn' index=0>基本</div>");
    settingBox.append(settingTabBtn_Base);

    var settingTabBtn_Look = $("<div class='settingTabBtn' index=1>外观</div>");
    settingBox.append(settingTabBtn_Look);

    var settingTabBtn_Data = $("<div class='settingTabBtn' index=2>数据</div>");
    settingBox.append(settingTabBtn_Data);

    // 备用的
    var settingTabBtn_Empty2 = $("<div class='settingTabBtn' index=3></div>");
    settingBox.append(settingTabBtn_Empty2);
    var settingTabBtn_Empty3 = $("<div class='settingTabBtn' index=4></div>");
    settingBox.append(settingTabBtn_Empty3);
    var settingTabBtn_Empty4 = $("<div class='settingTabBtn' index=5></div>");
    settingBox.append(settingTabBtn_Empty4);
    var settingTabBtn_Empty5 = $("<div class='settingTabBtn' index=6></div>");
    settingBox.append(settingTabBtn_Empty5);
    var settingTabBtn_Empty6 = $("<div class='settingTabBtn' index=7></div>");
    settingBox.append(settingTabBtn_Empty6);


    var settingTabBtn_About = $("<div class='settingTabBtn' index=8>关于</div>");
    settingBox.append(settingTabBtn_About);

    // var settingTabBtn_Float = $("<div class='settingTabBtn settingTabBtn_Float'></div>"); // 这是做鼠标经过选项时，滑动的小块
    // settingBox.append(settingTabBtn_Float);

    // 批量绑定事件
    $(".settingTabBtn").on({
        mousemove: function() {
            touchSettingTabBtn($(this).attr("index"));
        },
        mouseleave: function() {
            leaveSettingTabBtn($(this).attr("index"));
        },
        click: function() {
            selectSettingTabBtn($(this).attr("index"));
        },
    })


    // 各个设置面板
    // 【基本】面板
    var settingTab_Base = $("<div class='settingTab baseTab'></div>");
    settingBox.append(settingTab_Base);
    var settingTab_Base_ul = $("<ul></ul>");
    settingTab_Base.append(settingTab_Base_ul);

    // 【基本】面板 - 自动填写
    var settingTab_Base_li_Title1 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>自动填写</span></li>");
    settingTab_Base_ul.append(settingTab_Base_li_Title1);
    var settingTab_Base_li_AutoFill = $("<li class='tabLi tabItem'><label class='tabInfo'  style='cursor:pointer;'><input class='autoFill' type='checkbox'>&nbsp加载页面时自动填写</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_AutoFill);
    $(".autoFill").prop("checked", autoInput);
    $(".autoFill").click(function() {
        addData("autoInput", $(this).prop("checked"));
    });
    var settingTab_Base_li_OverWrite = $("<li class='tabLi tabItem'><label class='tabInfo'  style='cursor:pointer;'><input class='overWrite' type='checkbox'>&nbsp自动填写时覆盖内容</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_OverWrite);
    $(".overWrite").prop("checked", overWrite);
    $(".overWrite").click(function() {
        overWrite = $(this).prop("checked");
        addData("overWrite", overWrite);
    });
    var settingTab_Base_li_ForceFill = $("<li class='tabLi tabItem'><label class='tabInfo' style='cursor:pointer;'><input class='forceFill' type='checkbox'>&nbsp强制填写</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_ForceFill);
    $(".forceFill").prop("checked", forceFill);
    $(".forceFill").click(function() {
        forceFill = $(this).prop("checked");
        addData("forceFill", forceFill);
    });
    var settingTab_Base_li_AutoOpenUploadFile = $("<li class='tabLi tabItem'><label class='tabInfo' style='cursor:pointer;'><input class='autoOpenUploadFile' type='checkbox'>&nbsp加载页面时打开文件上传</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_AutoOpenUploadFile);
    $(".autoOpenUploadFile").prop("checked", autoOpenUploadFile);
    $(".autoOpenUploadFile").click(function() {
        autoOpenUploadFile = $(this).prop("checked");
        addData("autoOpenUploadFile", autoOpenUploadFile);
    });
    // 分隔li
    var settingTab_Base_SplitLi1 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Base_ul.append(settingTab_Base_SplitLi1);

    // 【基本】面板 - 数据
    var settingTab_Base_li_Title2 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>数据</span></li>");
    settingTab_Base_ul.append(settingTab_Base_li_Title2);
    var settingTab_Base_li_ProtectData = $("<li class='tabLi tabItem'><label class='tabInfo' style='cursor:pointer;'><input class='protectData' type='checkbox'>&nbsp数据保护</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_ProtectData);
    $(".protectData").prop("checked", protectData);
    $(".protectData").click(function() {
        protectData = $(this).prop("checked");
        addData("protectData", protectData);
    });
    // 分隔li
    var settingTab_Base_SplitLi2 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Base_ul.append(settingTab_Base_SplitLi2);

    // 【基本】面板 - 显示
    var settingTab_Base_li_Title3 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>显示</span></li>");
    settingTab_Base_ul.append(settingTab_Base_li_Title3);
    var settingTab_Base_li_ShowInformation = $("<li class='tabLi tabItem'><label class='tabInfo' style='cursor:pointer;'><input class='showInformation' type='checkbox'>&nbsp显示选项介绍</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_ShowInformation);
    $(".showInformation").prop("checked", showInformation);
    $(".showInformation").click(function() {
        showInformation = $(this).prop("checked");
        addData("showInformation", showInformation);
        if (showInformation) {
            showInfo();
            moveInfo();
        } else {
            hideInfo();
        }
    });
    var settingTab_Base_li_ShowMain = $("<li class='tabLi tabItem'><label class='tabInfo' style='cursor:pointer;'><input class='showMain' type='checkbox'>&nbsp显示主面板</input></label></li>");
    settingTab_Base_ul.append(settingTab_Base_li_ShowMain);
    $(".showMain").prop("checked", showMain);
    $(".showMain").click(function() {
        showMain = $(this).prop("checked");
        addData("showMain", showMain);
        if (showMain) {
            showMainBox();
        } else {
            hideMainBox();
        }
    });
    // 分隔li
    var settingTab_Base_SplitLi3 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Base_ul.append(settingTab_Base_SplitLi3);


    // 鼠标经过显示介绍infoBox
    $(".tabInfo").mouseover(function() {
        showInfo();
    });
    $(".tabInfo").mousemove(function() {
        moveInfo();
    });
    $(".tabInfo").mouseleave(function() {
        hideInfo();
    });





    // 【外观】面板
    var settingTab_Look = $("<div class='settingTab lookTab'></div>");
    settingBox.append(settingTab_Look);
    var settingTab_Look_ul = $("<ul></ul>");
    settingTab_Look.append(settingTab_Look_ul);


    // 【外观】面板 - 主题颜色
    var settingTab_Look_li_Title1 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>颜色</span></li>");
    settingTab_Look_ul.append(settingTab_Look_li_Title1);
    var settingTab_Look_li_Color = $("<li class='tabLi tabItem settingTab_Look_li1'>主题颜色&nbsp&nbsp<input type='color' value=" + mColor + " class='colorTab colorTab1' style='padding:0;border:none;margin:0;outline:none;width:14px;height:18px;cursor:pointer;'></li>");
    settingTab_Look_ul.append(settingTab_Look_li_Color);
    var colorTab = $(".colorTab1");
    colorTab.change(function() {
        mColor = colorTab.val()
        setColor('main');
        addData('mColor', mColor)
    })
    settingTab_Look_li_Color.dblclick(function() {
        mColor = mColorDefault;
        colorTab.val(mColor);
        setColor('main');
        addData('mColor', mColor)
        showMsg('恢复默认主题颜色：' + mColor, true)
    })

    var settingTab_Look_li_ColorCorrect = $("<li class='tabLi tabItem settingTab_Look_li2'>正确颜色&nbsp&nbsp<input type='color' value=" + mColorCorrect + " class='colorTab colorTab2' style='padding:0;border:none;margin:0;outline:none;width:14px;height:18px;cursor:pointer;'></li>");
    settingTab_Look_ul.append(settingTab_Look_li_ColorCorrect);
    var colorTab2 = $(".colorTab2");
    colorTab2.change(function() {
        mColorCorrect = colorTab2.val()
        setColor('correct');
        addData('mColorCorrect', mColorCorrect)
    })
    settingTab_Look_li_ColorCorrect.dblclick(function() {
        mColorCorrect = mColorCorrectDefault;
        colorTab2.val(mColorCorrect);
        setColor('correct');
        addData('mColorCorrect', mColorCorrect)
        showMsg('恢复默认正确颜色：' + mColorCorrect, true)
    })

    var settingTab_Look_li_ColorError = $("<li class='tabLi tabItem settingTab_Look_li3'>错误颜色&nbsp&nbsp<input type='color' value=" + mColorError + " class='colorTab colorTab3' style='padding:0;border:none;margin:0;outline:none;width:14px;height:18px;cursor:pointer;'></li>");
    settingTab_Look_ul.append(settingTab_Look_li_ColorError);
    var colorTab3 = $(".colorTab3");
    colorTab3.change(function() {
        mColorError = colorTab3.val()
        setColor('error');
        addData('mColorError', mColorError)
    })
    settingTab_Look_li_ColorError.dblclick(function() {
        mColorError = mColorErrorDefault;
        colorTab3.val(mColorError);
        setColor('error');
        addData('mColorError', mColorError)
        showMsg('恢复默认错误颜色：' + mColorError, true)
    })

    function setColor(colorType) {
        if (colorType == 'main') {
            settingTitleBox.css("backgroundColor", mColor)
            mTitleBox.css("backgroundColor", mColor)
            var settingTabBtn = $(".settingTabBtn");
            $(settingTabBtn[selectedTab]).css("backgroundColor", mColor);
            $("#menu_nav_container").css("backgroundColor", mColor);
            $(".versionTitleBox").css("backgroundColor", mColor);
            if (showVersion == '1') {

            } else if (showVersion == '2') {
                $(".mainBox").css("backgroundColor", mColor);
                $(".settingBox").css("backgroundColor", mColor);
                $(".colorTab").css("backgroundColor", mColor);
                $(".settingTabBtnSelected").css("backgroundColor", "#fff");
                $(".settingTabBtnSelected").css("color", mColor);
                $(".versionBox").css("backgroundColor", mColor);
                $(".msg").css({ "background-color": mColor });
                $(".cfmBox .icon").css({ "color": mColor, });
            }
        } else if (colorType == 'correct') {
            $(".mCorrect").css("backgroundColor", mColorCorrect)
        } else if (colorType == 'error') {
            $(".mError").css("backgroundColor", mColorError)
        }
    }
    // 分隔li
    var settingTab_Look_SplitLi1 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Look_ul.append(settingTab_Look_SplitLi1);

    // 【外观】面板 - 版本主题
    var settingTab_Look_li_Title2 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>版本主题</span></li>");
    settingTab_Look_ul.append(settingTab_Look_li_Title2);
    var settingTab_Look_li_Version = $("<li class='tabLi tabItem'><label class='showVersion1' style='margin-right:10px;'><input type='radio' name='version' value='1.0' >1.0</label><label class='showVersion2'><input type='radio' name='version' value='2.0'>2.0</label></li>");
    settingTab_Look_ul.append(settingTab_Look_li_Version);
    if (showVersion == 1) {
        $(".showVersion1").children("input").attr("checked", "checked");
    } else if (showVersion == 2) {
        $(".showVersion2").children("input").attr("checked", "checked");
    }
    $(".showVersion1").click(function() { selectVersion(1) });
    $(".showVersion2").click(function() { selectVersion(2) });


    function selectVersion(whichVersion) {
        if (whichVersion == 1) {
            $(".mainBox").css("background-color", "#fff");
            $(".mainBox").removeClass("mainBox2");
            $(".mText").removeClass("mText2");
            $(".mTitleBox").removeClass("mTitleBox2");
            $(".mUl").removeClass("mUl2");

            $(".msg").css({ "background-color": "#fff", "color": "black", });
            $(".cfmBox .icon").css({ "background-color": mColor, "color": "#fff", });

            $(settingTitleBox).css({ "box-shadow": "0px 1px 8px #333", });
            $(".settingBox").css({ "background-color": "", "opacity": 1, });
            $(".settingTabBtn").css({ "color": mColor, });
            $(".settingTabBtnSelected").css({ "background-color": mColor, "color": "#fff", });
            $(".settingTab").removeClass("settingTab2");
            $(".tabLi").removeClass("tabLi2");
            $(".colorTab").css({ "background-color": "#fff", });

            $(versionTitleBox).css({ "box-shadow": "0px 1px 8px #333", });
            $(".versionBox").css({ "background-color": "", "opacity": 1, "box-shadow": "0px 0px 5px #333", });
            $(".versionBox").removeClass("versionBox2");
        } else if (whichVersion == 2) {
            $(".mainBox").css("background-color", mColor);
            $(".mainBox").addClass("mainBox2");
            $(".mText").addClass("mText2");
            $(".mTitleBox").addClass("mTitleBox2");
            $(".mUl").addClass("mUl2");

            $(".msg").css({ "background-color": mColor, "color": "#fff", "box-shadow": "0px 0px 5px #ccc", });
            $(".cfmBox .icon").css({ "background-color": "#fff", "color": mColor, });

            $(settingTitleBox).css({ "box-shadow": "", })
            $(".settingBox").css({ "background-color": mColor, "opacity": 0.9, "box-shadow": "0px 0px 5px #333", });
            $(".settingTabBtn").css({ "color": "#fff", });
            $(".settingTabBtnSelected").css({ "background-color": "#fff", "color": mColor, });
            $(".settingTab").addClass("settingTab2");
            $(".tabLi").addClass("tabLi2");
            $(".colorTab").css({ "background-color": mColor, });

            $(versionTitleBox).css({ "box-shadow": "", });
            $(".versionBox").css({ "background-color": mColor, "opacity": 0.9, "box-shadow": "0px 0px 5px #333", });
            $(".versionBox").addClass("versionBox2");
        }
        showVersion = whichVersion;
        addData("showVersion", showVersion);
        if (showMain) { showMainBox() };
        formatInfo = true; // 显示框自动重新设置格式
    }


    // 分隔li
    var settingTab_Look_SplitLi2 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Look_ul.append(settingTab_Look_SplitLi2);




    // 【数据】面板
    var settingTab_Data = $("<div class='settingTab dataTab'></div>");
    settingBox.append(settingTab_Data);
    var settingTab_Data_ul = $("<ul></ul>");
    settingTab_Data.append(settingTab_Data_ul);

    // 【数据】面板 - 脚本
    var settingTab_Data_li_Title1 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>脚本</span></li>");
    settingTab_Data_ul.append(settingTab_Data_li_Title1);
    var settingTab_Data_li_ShowTime = $("<li class='tabLi tabItem' style='position:relative;'>消息持续时间（秒）<input class='mInput mShowTime' value=" + mMsgDisappearTime + " autocomplete='off' style='position:absolute;left:130px;height:20px;margin-right:0px;font-family:Microsoft YaHei;'></li>");
    settingTab_Data_ul.append(settingTab_Data_li_ShowTime);
    $(".mShowTime").blur(function() {
        let number = $(this).val();
        if (/^([1-9]|10)$/.test(number)) {
            mMsgDisappearTime = number;
            addData('mMsgDisappearTime', mMsgDisappearTime);
            showMsg('数据保存成功：消息持续时间（秒）已修改为 - [' + mMsgDisappearTime + ']', true);
        } else {
            $(this).val(mMsgDisappearTime);
            showMsg('数据没有保存：只能输入1-10的正整数。', false);
        }
    });
    // 分隔li
    var settingTab_Data_SplitLi1 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Data_ul.append(settingTab_Data_SplitLi1);

    // 【数据】面板 - Excel
    var settingTab_Data_li_Title2 = $("<li class='tabLi'><span style='font-size:14px;font-weight:700;'>Excel</span></li>");
    settingTab_Data_ul.append(settingTab_Data_li_Title2);
    var settingTab_Data_li_JESheetIndex = $("<li class='tabLi tabItem' style='position:relative;'>JE Sheet Index<input class='mInput mJESheetIndex' value=" + mJESheetIndex + " autocomplete='off' style='position:absolute;left:130px;height:20px;margin-right:0px;font-family:Microsoft YaHei;'><strong class='mJESheetIndexGuide' style='position:absolute;left:255px;user-select=none;cursor:pointer;'>?</strong></li>");
    settingTab_Data_ul.append(settingTab_Data_li_JESheetIndex);
    $(".mJESheetIndex").blur(function() {
        if ($(this).val() != '') {
            mJESheetIndex = $(this).val();
            if (/^\d{1,}$/.test(mJESheetIndex) && mJESheetIndex != '0') { mJESheetIndex = parseInt(mJESheetIndex); }; // 0会变成表格名称
            addData('mJESheetIndex', mJESheetIndex);
            showMsg('数据保存成功：mJESheetIndex已修改为 - [' + mJESheetIndex + ']', true);
        } else {
            $(this).val(mJESheetIndex);
            showMsg('数据没有保存：数据不能为空。', false);
        }
    })
    $(".mJESheetIndexGuide").mouseenter(function() {
        showMsg('提示：若填写数字，表示第几张工作表；若填写非数字，表示工作表名称。', true);
    })

    var settingTab_Data_li_JEStartRow = $("<li class='tabLi tabItem' style='position:relative;'>JE Start Row<input class='mInput mJEStartRow' value=" + mJEStartRow + " autocomplete='off' style='position:absolute;left:130px;height:20px;margin-right:0px;font-family:Microsoft YaHei;'><strong class='mJEStartRowGuide' style='position:absolute;left:255px;user-select=none;cursor:pointer;'>?</strong></li>");
    settingTab_Data_ul.append(settingTab_Data_li_JEStartRow);
    $(".mJEStartRow").blur(function() {
        if (/^[1-9]\d*$/.test($(this).val())) {
            mJEStartRow = parseInt($(this).val()); // 只能非零正整数
            addData('mJEStartRow', mJEStartRow);
            showMsg('数据保存成功：mJEStartRow已修改为 - [' + mJEStartRow + ']', true);
        } else {
            $(this).val(mJEStartRow);
            showMsg('数据没有保存：只能输入正整数。', false);
        }
    })
    $(".mJEStartRowGuide").mouseenter(function() {
        showMsg('提示：黏贴JE数据起始行，默认是第11行。', true);
    })



    // 分隔li
    var settingTab_Data_SplitLi2 = $("<li style='list-style:none;height:30px;'></li>");
    settingTab_Data_ul.append(settingTab_Data_SplitLi2);


    // 这些事点击Tab按钮以后右边显示的白板 备用
    var settingTab_Empty2 = $("<div class='settingTab'></div>");
    settingBox.append(settingTab_Empty2);
    var settingTab_Empty3 = $("<div class='settingTab'></div>");
    settingBox.append(settingTab_Empty3);
    var settingTab_Empty4 = $("<div class='settingTab'></div>");
    settingBox.append(settingTab_Empty4);
    var settingTab_Empty5 = $("<div class='settingTab'></div>");
    settingBox.append(settingTab_Empty5);
    var settingTab_Empty6 = $("<div class='settingTab'></div>");
    settingBox.append(settingTab_Empty6);
    // var settingTab_Empty7 = $("<div class='settingTab'></div>");
    // settingBox.append(settingTab_Empty7);
    // var settingTab_Empty8 = $("<div class='settingTab'></div>");
    // settingBox.append(settingTab_Empty8);


    var settingTab_About = $("<div class='settingTab tabAbout' ></div>"); // style='position:relative;'
    settingBox.append(settingTab_About);

    var settingTab_About_ul = $("<ul></ul>");
    settingTab_About.append(settingTab_About_ul);
    var settingTab_About_li1 = $("<li class='tabLi'>脚本名称：" + mName + "</li>");
    var settingTab_About_li2 = $("<li class='tabLi'>当前版本：" + version + "</li>");
    var settingTab_About_li3 = $("<li class='tabLi'>最后更新日期：" + lastUpdateDate + "</li>");
    settingTab_About_ul.append(settingTab_About_li1);
    settingTab_About_ul.append(settingTab_About_li2);
    settingTab_About_ul.append(settingTab_About_li3);

    var tabCkeckUpdate = $("<span class='tabButton'>检查更新</span>");
    var tabCkeckVersion = $("<span class='tabButton'>查看版本信息</span>");
    // 反馈：https://greasyfork.org/en/scripts/408587/feedback
    settingTab_About.append(tabCkeckUpdate);
    settingTab_About.append(tabCkeckVersion);

    tabCkeckVersion.css("left", 57 + 100 + 15); // 这个单独洗不然两个按钮叠加

    tabCkeckUpdate.click(function() {
        window.open("https://greasyfork.org/en/scripts/408587");
    });

    tabCkeckVersion.click(function() {
        openInSetting = true;
        showVersionBox();
    })




    // 主面板 - 标题框
    var mTitleBox = $("<div class='mTitleBox' style='background-color:" + mColor + ";height:30px;width:100%;border-radius:25px 25px 1px 1px;margin:0;box-shadow:0px 1px 8px #333;cursor:move;'></div>");
    mBox.append(mTitleBox);

    $(mBox)[0].addEventListener('mousedown', function(e) {
        var mWidth = parseInt(mBox.css("width"));
        var x = e.pageX - (window.innerWidth - mWidth - parseInt(mBox.css("right")));
        var y = e.pageY - parseInt(mBox.css("top"));

        document.addEventListener('mousemove', move);

        function move(e) {
            mBox.css({
                right: window.innerWidth - (e.pageX - x) - mWidth,
                top: e.pageY - y,
            });
        }

        document.addEventListener('mouseup', function() {
            document.removeEventListener('mousemove', move);
        })
    })


    var mLogoBox = $("<div class='mLogoBox' style='width:320px;height:30px;margin:0 auto;'></div>")
    mTitleBox.append(mLogoBox)

    var mTitle = $("<h1 style='display:inline-block;font-size:12px;text-align:center;height:30px;line-height:30px;width:100%;font-family:" + mFontFamily + ";color:#fff;margin:0;user-select:none;text-transform:none;'>" + mName + "</h1>")
    mLogoBox.append(mTitle);

    var mUl = $("<ul class='mUl' style='margin-bottom:55px;'></ul>")
    mBox.append(mUl);

    // 让主面板暂时隐藏
    var mainBoxCloseBtn = $("<span class='closeBtn' style='font-family:" + mFontFamily + ";'>-</span>");
    $(mTitleBox).append(mainBoxCloseBtn);

    mainBoxCloseBtn.click(function() {
        hideMainBox(); // 隐藏主面板
    });


    // 第一个Li - companyCode
    var mLi1 = $("<li class='mLi'><i class='mText'>CompanyCode</i></li>");
    mUl.append(mLi1);

    var mCompanyCodeBox = document.createElement('input'); // 单元格
    mCompanyCodeBox.className = 'mInput';
    mLi1.append(mCompanyCodeBox);
    var mCheckCompanyCode = document.createElement('i');
    mCheckCompanyCode.className = 'mCheck';
    mLi1.append(mCheckCompanyCode);

    mCompanyCodeBox.addEventListener('blur', function() {
        companyCode = mCompanyCodeBox.value;
        documentCurrency = mapCurrency(mCompanyCodeBox.value);
        mCurrencyBox.value = documentCurrency;
        checkAll();
    })




    // 第二个Li - SB or Z1
    var mLi2 = $("<li class='mLi' style='display:none'></li>"); // SB和Z1的选项按钮不会显示了
    mUl.append(mLi2);

    var mDocumentType1 = document.createElement('input');
    mDocumentType1.type = 'radio';
    mDocumentType1.name = 'DocumentType';
    mDocumentType1.innerHTML = 'SB'
    mDocumentType1.style.color = mColor;
    mLi2.append(mDocumentType1);
    var mText2 = document.createElement('i');
    mText2.className = 'mText';
    mLi2.append(mText2);
    mText2.innerHTML = 'SB ';
    var mDocumentType2 = document.createElement('input');
    mDocumentType2.type = 'radio';
    mDocumentType2.name = 'DocumentType';
    mDocumentType2.innerHTML = 'SB'
    mDocumentType2.style.color = mColor;
    mLi2.append(mDocumentType2);
    var mText3 = document.createElement('i');
    mText3.className = 'mText';
    mLi2.append(mText3);
    mText3.innerHTML = 'Z1 ';



    // 第二点五个 Currency
    var mLi25 = $("<li class='mLi'><i class='mText'>Currency</i></li>");
    mUl.append(mLi25);

    var mCurrencyBox = document.createElement('input');
    mCurrencyBox.className = 'mInput';
    mLi25.append(mCurrencyBox);
    var mCheckCurrency = document.createElement('i');
    mCheckCurrency.className = 'mCheck';
    mLi25.append(mCheckCurrency);

    mCurrencyBox.addEventListener('blur', function() {
        documentCurrency = mCurrencyBox.value;
        checkAll();
    })


    // 第三个Date
    var mLi3 = $("<li class='mLi'><i class='mText'>PostingDate (Y/M/D)</i></li>");
    mUl.append(mLi3);

    var mPostingDateBox = document.createElement('input');
    mPostingDateBox.className = 'mInput';
    mLi3.append(mPostingDateBox);
    var mCheckPostingDate = document.createElement('i');
    mCheckPostingDate.className = 'mCheck';
    mLi3.append(mCheckPostingDate);


    // 第四个Reversal Date
    var mLi4 = $("<li class='mLi'><i class='mText'>ReversalDate</i></li>");
    mUl.append(mLi4);

    var mReversalDateBox = document.createElement('input');
    mReversalDateBox.className = 'mInput';
    mLi4.append(mReversalDateBox);
    var mCheckReversalDate = document.createElement('i');
    mCheckReversalDate.className = 'mCheck';
    mLi4.append(mCheckReversalDate);

    mPostingDateBox.addEventListener('blur', function() {
        // 修改posting日期后自动保存
        postingDate = mPostingDateBox.value;
        selectDocumentType(documentType);
        checkAll();
    })

    mReversalDateBox.addEventListener('blur', function() {
        reversalDate = mReversalDateBox.value;
        checkAll();
    })



    // 第四个LongText
    var mLi5 = $("<li class='mLi'><i class='mText'>LongText</i></li>");
    mUl.append(mLi5);

    var mLongTextBox = document.createElement('input');
    mLongTextBox.className = 'mInput';
    mLi5.append(mLongTextBox);
    mLongTextBox.style.width = '200px';
    mLongTextBox.setAttribute('autocomplete', 'off')
    mLongTextBox.setAttribute('placeholder', '在这里输入JE Description')
    mLongTextBox.style.float = 'right';
    mLongTextBox.style.marginRight = '50px';
    mLongTextBox.style.fontFamily = mFontFamily;

    mLongTextBox.addEventListener('blur', function() {
        longText = mLongTextBox.value;
    })


    $(".mInput").on("mousemove", function(e) { e.stopPropagation(); }) // 阻止事件冒泡
    $(".mInput").on("mousedown", function(e) { e.stopPropagation(); }) // 阻止事件冒泡


    // 下边的按钮
    var btnFill = $("<div class='mBtn' style='left:40px;'>填写</div>")
    mBox.append(btnFill);
    btnFill.click(function() {
        if (mError == 0) {
            var system = companyCodeBox ? 'SAP' : 'non-SAP';
            showConfirm('检测到当前的Template是：' + system + '，是否自动填写JE？', '填写');
        } else {
            showMsg('不能填写：有' + mError + '处错误。', false, function() {});
        }
    })

    var btnClear = $("<div class='mBtn' style='left:" + (40 + (50 + 10) * (2 - 1)) + "px;'>清空</div>")
    mBox.append(btnClear);
    btnClear.click(function() {
        var system = companyCodeBox ? 'SAP' : 'non-SAP';
        showConfirm('检测到当前的Template是：' + system + '，是否清空所有内容？', '清空');
    })

    var btnReset = $("<div class='mBtn' style='left:" + (40 + (50 + 10) * (3 - 1)) + "px;'>重置</div>")
    mBox.append(btnReset);
    btnReset.click(() => { autoReset() })


    // 介绍框
    // top,left根据鼠标变化而变化，height根据内容自动调整
    var infoBox = $(`
        <div class='msg infoBox' style='width:300px;'>
            <h2 class='info-Title'>标题</h2>
            <p class='info-Introduce'>这里是内容</p>
        </div>
        `);
    prepareArea.append(infoBox);










    // 统一调整格式
    // 统一调整格式
    // 统一调整格式
    // 统一调整格式
    // 统一调整格式
    // 统一调整格式
    var mStyleForInput = document.getElementsByClassName('mInput');
    for (let i = 0; i < mStyleForInput.length; i++) {
        mStyleForInput[i].setAttribute('autocomplete', 'off');
        mStyleForInput[i].style.fontFamily = mFontFamily;
    }
    var mStyleForBtn = document.getElementsByClassName('mBtn');
    for (let i = 0; i < mStyleForBtn.length; i++) {
        mStyleForBtn[i].addEventListener('mouseenter', function() {
            this.style.color = '#fff';
            this.style.backgroundColor = '#54565a'; // 灰色
            this.style.border = 'none';
        })
        mStyleForBtn[i].addEventListener('mouseleave', function() {
            this.style.backgroundColor = '#fff';
            this.style.color = '#333';
        })
        mStyleForBtn[i].addEventListener('mousedown', function() {
            this.style.backgroundColor = mColor; // 深色
        })
        mStyleForBtn[i].addEventListener('mouseup', function() {
            this.style.backgroundColor = '#54565a'; // 灰色
        })
    }

    var mStyleForMsg = document.getElementsByClassName('msg');
    for (let i = 0; i < mStyleForMsg.length; i++) {
        mStyleForMsg[i].style.top = (window.innerHeight - 70) / 2 + 'px';
        mStyleForMsg[i].style.left = (window.innerWidth - mStyleForMsg[i].offsetWidth) / 2 + 'px';
        mStyleForMsg[i].style.fontFamily = mFontFamily;
    }










    // 填写默认值
    // 填写默认值
    // 填写默认值
    // 填写默认值
    // 填写默认值
    var canAutoFill = identifyCompanyCode(); // 是否可以自动填写（识别不到companyCode就是False）
    if (forceFill) {
        companyCode = canAutoFill ? identifyCompanyCode() : companyCode;
    } else {
        companyCode = canAutoFill ? identifyCompanyCode() : null;
    }
    mCompanyCodeBox.value = companyCode;
    if (companyCode) { addData('companyCode', companyCode); } // 如果不是null，就保存数据

    documentType = reversalPeriodBox.length ? 'Z1' : 'SB';
    if (documentType == 'SB') {
        mDocumentType1.setAttribute('checked', 'checked');
        mDocumentType2.disabled = true;
    } else {
        mDocumentType2.setAttribute('checked', 'checked');
        mDocumentType1.disabled = true;
    };
    // postingDate根据periodBox变化而变化 （必须在选择documentType之前，因为它会计算reversalDate）
    postingDate = identifyPostingDate();

    selectDocumentType(documentType);
    documentCurrency = mapCurrency(companyCode);
    mCurrencyBox.value = documentCurrency;
    mPostingDateBox.value = postingDate;
    mReversalDateBox.value = reversalDate;
    longText = nameBox.val();
    mLongTextBox.value = longText;
    checkAll(); // 检测

    // 自动填写
    if (autoInput && mError == 0) {
        var fillComplete = autoFill(); // 自动填写
        if (fillComplete) {
            showMsg('已开启自动填写，填写完成。', true);
        };
    } else if (mError != 0) {
        showMsg('识别不到正确的CompanyCode。又由于没有开启强制填写，自动填写没有执行。', false);
    };
    // 自动调整宽高
    adjustTable();
    // 更改版本主题
    selectVersion(showVersion);
    // 显示主面板
    if (showMain) { showMainBox() };
    // 调整界面
    adjustWorkArea();
    // 自动打开文件上传

    if (autoOpenUploadFile && !hasDataSheet()) {
        $("#JEPrepAttachFilesButton").trigger("click");
        autoUploadFile();
    };
    // 为上传文件添加点击事件
    document.querySelector("#JEPrepAttachFilesButton").addEventListener('click', () => {
        autoUploadFile();
    });

    // 显示版本信息
    var openInSetting = true; // 是否在设置里打开，如果是，背景cover就不消失
    if (getData('version') != version) {
        // 更新版本显示更新内容
        openInSetting = false;
        showVersionBox(true);
        addData('version', version);
    }









    // 添加Keydown键盘按下事件
    // 添加Keydown键盘按下事件
    // 添加Keydown键盘按下事件
    // 添加Keydown键盘按下事件
    // 添加Keydown键盘按下事件
    // 添加Keydown键盘按下事件
    $(document).keydown(function(e) {
        if (e.keyCode == 27) {
            // ESC == 27
            if (openWindow.length > 0) {
                closeWindow = openWindow[openWindow.length - 1]; // 数组的最后一个元素
                switch (closeWindow) {
                    case 'confirmBox':
                        closeConfirm();
                        break;
                    case 'settingBox':
                        closeSetting();
                        break;
                    case 'versionBox':
                        closeVersionBox();
                        break;
                };
            }
        } else if (e.keyCode == 13) {
            // Enter == 13
            if (openWindow.length > 0 && openWindow[openWindow.length - 1] == 'confirmBox') {
                confirmConfirm();
            }
        }
    });

    // 框动态居中
    window.onresize = function() {
        msgBox.css("left", (window.innerWidth - parseInt(msgBox.css("width"))) / 2);
        confirmBox.css("left", (window.innerWidth - parseInt(confirmBox.css("width"))) / 2);
        settingBox.css("left", (window.innerWidth - parseInt(settingBox.css("width"))) / 2);
        versionBox.css("left", (window.innerWidth - parseInt(versionBox.css("width"))) / 2);
    }








    // 下边是函数
    // 下边是函数
    // 下边是函数
    // 下边是函数
    // 下边是函数
    function autoFill() {
        var system = companyCodeBox.length ? 'SAP' : 'non-SAP';

        console.log();;

        if (protectData && hasData()) {
            showMsg('检测到单元格里已有数据，自动填写被取消。', false);
            return false;
        }

        if (system == 'SAP') {
            companyCode = mCompanyCodeBox.value;
            if (mDocumentType1.checked) {
                documentType = 'SB';
                reversalDate = '';
            } else {
                documentType = 'Z1';
                reversalDate = mReversalDateBox.value;
                $(reversalPeriodBox).children("option").eq(1).prop("selected", true); // 如果z1，默认选择第二个选项
            };
            postingDate = mPostingDateBox.value;
            longText = mLongTextBox.value;
            shortText = longText.substring(0, 16);

            fillEachBox($("#Name"), longText, true); // 强行填写名字
            fillEachBox(companyCodeBox, companyCode);
            fillEachBox(documentTypeBox, documentType);
            fillEachBox(documentCurrencyBox, documentCurrency);
            fillEachBox(preparerCostCenterBox, preparerCostCenter);
            fillEachBox(referenceBox, shortText);
            fillEachBox(adHocJudgmentalBox, shortText);

            fillEachBox(postingDateBox, postingDate);
            fillEachBox(documentDateBox, postingDate);
            fillEachBox(translationDateBox, postingDate);
            fillEachBox(reversalDateBox, reversalDate);
            if (controlTotalBox.val() == 'CT') {
                controlTotalBox.val("");
            }; // 先清空CT，不然没法填
            fillEachBox(controlTotalBox, controlTotal);
            fillEachBox(jeDescriptionBox, longText);

            ctDescriptionBox.prop("readonly", ""); // 填写CT
            fillEachBox(ctDescriptionBox, ctMapping[controlTotal]);
            // ctDescriptionBox.val(ctMapping[controlTotal]);
            ctDescriptionBox.prop("readonly", "readonly");

            ownershipBox.prop("readonly", ""); // 填写ownership
            fillEachBox(ownershipBox, ownership);
            // ownershipBox.val(ownership);
            ownershipBox.prop("readonly", "readonly");

            // 把当前数据保存到localStorage
            addData('companyCode', companyCode);
            addData('preparerCostCenter', preparerCostCenter);
            addData('postingDate', postingDate);

        } else if (system != 'SAP') {
            companyCode = mCompanyCodeBox.value; // 这里就是nonSAP Location
            postingDate = mPostingDateBox.value;
            longText = mLongTextBox.value;
            shortText = longText.substring(0, 14); // 这里就是Document No - 14个字符

            fillEachBox(nonSAPLocationBox, companyCode);
            fillEachBox(postingDateBox, postingDate);
            fillEachBox(entryCurrencyBox, documentCurrency);
            fillEachBox(jeDescriptionBox, longText);
            fillEachBox(documentNoBox, shortText);

            // 把当前数据保存到localStorage
            addData('companyCode', companyCode);
            addData('preparerCostCenter', preparerCostCenter);
            addData('postingDate', postingDate);
        }
        adjustTable(); // 调整Table宽
        mCollecAutoFill += 1; // 记录数据
        addData('mCollecAutoFill', mCollecAutoFill);
        return true;
    }


    function fillEachBox(whichBox, content, hardFill) {
        whichBox.css({
            transition: "background-color 0.5s",
        });
        // jQuery高版本的animate只能变化数值，不能变化颜色了。
        if (whichBox.val() && !hardFill && !overWrite) {
            whichBox.css("backgroundColor", mColorError);
        } else {
            whichBox.prop("value", content);
            whichBox.css("backgroundColor", mColorCorrect);
        };
        setTimeout(function() {
            whichBox.css("backgroundColor", "#fff");
        }, 500);
        setTimeout(function() {
            whichBox.css("backgroundColor", ""); // 去掉黑边
        }, 750);
    }


    // 检测中间单元格里是否有数据
    function hasData() {
        if (companyCodeBox.val() || documentCurrencyBox.val() || postingDateBox.val() || jeDescriptionBox.val()) {
            return true;
        } else {
            return false;
        }
    }

    // 检测下边单元格里是否有数据
    function hasDataSheet() {
        trs = document.querySelector('#JEPrepTable').querySelector('tbody').querySelectorAll('tr'); // 每一行元素（Table）
        var tds = trs[0].querySelectorAll('td'); // 每一个单元格（Table）
        if (tds[1].querySelector('input').value == '') {
            return false;
        } else {
            return true;
        }
    }


    function autoClear() {
        var system = companyCodeBox ? 'SAP' : 'non-SAP';
        // var cfmAutoClear = confirm('检测到当前的Template是：' + system + '，是否清空所有内容？');

        if (system == 'SAP') {
            companyCodeBox.val("");
            documentTypeBox.val("");
            documentCurrencyBox.val("");
            preparerCostCenterBox.val("");
            referenceBox.val("");
            adHocJudgmentalBox.val("");

            postingDateBox.val("");
            documentDateBox.val("");
            translationDateBox.val("");
            reversalDateBox.val("");
            controlTotalBox.val("");
            jeDescriptionBox.val("");

            ctDescriptionBox.prop("readonly", ""); // 填写CT
            ctDescriptionBox.val("");
            ctDescriptionBox.prop("readonly", "readonly");
            ownershipBox.prop("readonly", ""); // 填写ownership
            ownershipBox.val("");
            ownershipBox.prop("readonly", "readonly");

        } else if (system != 'SAP') {
            nonSAPLocationBox.val("");
            postingDateBox.val("");
            entryCurrencyBox.val("");
            jeDescriptionBox.val("");
            documentNoBox.val("");
        }
        mCollecAutoClear += 1; // 记录数据
        addData('mCollecAutoClear', mCollecAutoClear);
    }



    // 选择SB还是Z1
    function selectDocumentType(whichType) {
        if (whichType == 'SB') {
            mReversalDateBox.value = '';
            mReversalDateBox.disabled = 'true';
        } else {
            var date = postingDate.split('/');
            var reversalYear = 0;
            var reversalMonth = 0;
            var postingYear = parseInt(date[0]);
            var postingMonth = parseInt(date[1]);
            if (postingMonth >= 12) {
                reversalMonth = 1;
                reversalYear = postingYear + 1;
            } else {
                reversalMonth = postingMonth + 1;
                reversalYear = postingYear;
            }

            reversalDate = reversalYear + '/' + reversalMonth + '/' + reversalDay;

            mReversalDateBox.value = reversalDate;
            mReversalDateBox.disabled = '';
        }
        checkAll();
    }



    // 获取国家币种 - 如果没有就返回USD
    function mapCurrency(whichContry) {
        if (currencyMapping[whichContry] == undefined) {
            return 'USD';
        } else {
            return currencyMapping[whichContry];
        }
    }


    // 设置对错Style
    function setCheckCSS(checkObject) {
        if (checkObject.className.search('mCorrect') != -1) {
            checkObject.style.backgroundColor = mColorCorrect; // 绿色
            checkObject.innerHTML = '√';
        } else {
            checkObject.style.backgroundColor = mColorError;
            checkObject.innerHTML = '×';
        }
        checkObject.style.borderRadius = '20px';
        checkObject.style.color = '#fff';
        checkObject.style.mFontFamily = 'Candara';
        checkObject.style.display = 'block';
    }


    // Check所有的项目
    function checkAll() {
        mError = 0; // 初始化

        // CompanyCode 
        var mCurr = currencyMapping[companyCode];
        var companyCodeExsit = mCurr === undefined ? false : true; // 看国家是否存在 - 根据是否能匹配到货币
        mCheckCompanyCode.className = companyCodeExsit ? 'mCheck mCorrect' : 'mCheck mError';
        if (!companyCodeExsit) { mError += 1 };
        setCheckCSS(mCheckCompanyCode);
        // Currency
        var mCurry = mCurrencyBox.value;
        mCheckCurrency.className = mCurry.length == 3 ? 'mCheck mCorrect' : 'mCheck mError';
        if (mCurry.length != 3) { mError += 1 };
        setCheckCSS(mCheckCurrency);
        // PostingDate 验证是否日期格式
        var d = new Date(postingDate);
        var isDate = (d.getDate() == postingDate.substring(postingDate.length - 2));
        mCheckPostingDate.className = isDate ? 'mCheck mCorrect' : 'mCheck mError';
        if (!isDate) { mError += 1 };
        setCheckCSS(mCheckPostingDate);
        // ReversalDate 验证是否日期格式
        if (documentType != 'SB') {
            var dd = new Date(reversalDate);
            var isDate2 = (dd.getDate() == reversalDate.substring(reversalDate.length - 2));
            mCheckReversalDate.className = isDate2 ? 'mCheck mCorrect' : 'mCheck mError';
            if (!isDate2) { mError += 1 };
            setCheckCSS(mCheckReversalDate);
        } else {
            mCheckReversalDate.className = 'mCheck';
            mCheckReversalDate.style.display = 'none';
        }
    }


    // 重置面板
    function autoReset() {
        companyCode = getData('companyCode');
        companyCode = companyCode ? companyCode : '5003';
        mapCurrency(companyCode);
        postingDate = getData('postingDate');
        postingDate = postingDate ? postingDate : '2020/7/31';
        selectDocumentType(documentType);
        mCompanyCodeBox.value = companyCode;
        documentCurrency = mapCurrency(companyCode);
        mCurrencyBox.value = documentCurrency;
        mPostingDateBox.value = postingDate;
        mReversalDateBox.value = reversalDate;
        mLongTextBox.value = longText;
        checkAll();
        showMsg('重置完成。', true);
        mCollecAutoReset += 1; // 记录数据
        addData('mCollecAutoReset', mCollecAutoReset);
    }



    function showMsg(message, isOK, callback) {
        mWaitTime = mMsgDisappearTime; // 初始化消息框消失时间
        clearInterval(msgBox.timer);
        msg.html(message);
        var orgLeft = (window.innerWidth - parseInt(msgBox.css("width"))) / 2;
        msgBox.css({
            // transition: "opacity 0.5s,top 0.5s", // 动画延迟 不需要了
            display: "block",
            position: "fixed",
            opacity: 0,
            top: (window.innerHeight - 70) / 2 + 20,
            left: orgLeft,
            zIndex: 999999999,
        });
        // msgBox.style.top = (window.innerHeight - 70) / 2 - 20 + 'px;
        if (isOK) {
            msgIcon.attr("class", "icon iconCorrect");
            msgIcon.css("backgroundColor", mColorCorrect);
            msgIcon.html("√");
        } else {
            msgIcon.attr("class", "icon iconError");
            msgIcon.css("backgroundColor", mColorError);
            msgIcon.html("×");
        }

        let msgOpacity = showVersion == '1' ? 1 : 0.9;
        msgBox.stop().animate({
            top: (window.innerHeight - 70) / 2,
            opacity: msgOpacity, // 透明度变1
        }, 500); // 动画效果 500毫秒

        clearInterval(msgBox.timer); // 先清除定时器，只能有一个定时器执行。
        msgBox.timer = setInterval(function() {
            if (mWaitTime > 1) {
                mWaitTime--;
            } else {
                msgBox.stop().animate({
                    top: (window.innerHeight - 70) / 2 - 20,
                    opacity: 0, // 透明度变1
                }, 500, "swing", function() {
                    msgBox.css("display", "none");
                }); // 动画效果 500毫秒

                clearInterval(msgBox.timer);
                mWaitTime = mMsgDisappearTime; // 初始化消息框消失时间
                if (callback) {
                    callback(); // 回调函数
                };
            }
        }, 1000);
    }



    function showConfirm(message, whatToDo) {
        confirmMsg.html(message);
        var orgTop = (window.innerHeight - parseInt(confirmBox.css("height"))) / 2;
        var orgLeft = (window.innerWidth - parseInt(confirmBox.css("width"))) / 2;

        confirmBox.css({
            position: "fixed",
            display: "block",
            top: orgTop + 20,
            left: orgLeft,
        });

        let confirmOpacity = showVersion == '1' ? 1 : 0.9;
        confirmBox.animate({
            opacity: confirmOpacity,
            top: orgTop,
        }, confirmDelay);

        cover.style.display = 'block';
        cover.style.transition = 'opacity 0.5s';
        cover.style.opacity = '.3';

        doWhat = whatToDo;
        openWindow.push('confirmBox');
    }



    function closeConfirm() {
        var newTop = parseInt($(".cfmBox").css("top")) - 20;
        $(".cfmBox").animate({
            top: newTop + "px",
            opacity: 0,
        }, confirmDelay, "swing", function() {
            $(".cfmBox").css({
                top: newTop + 20 * 2,
                display: "none",
            });
            openWindow.pop();
            if (openWindow.length == 0) {
                cover.style.display = 'none';
            };
        });
    }




    function confirmConfirm() {
        closeConfirm();
        setTimeout(function() {
            if (doWhat == '填写') {
                var fillComplete = autoFill();
                if (fillComplete) {
                    showMsg("自动填写完成。", true);
                };
            } else if (doWhat == '清空') {
                autoClear();
                showMsg("自动清空完成。", true);
            };
        }, confirmDelay)
    }





    // localStorage操作

    function loadData() {
        // 清除掉1.0版本下的数据
        localStorage.removeItem('companyCode');
        localStorage.removeItem('postingDate');
        localStorage.removeItem('preparerCostCenter');

        if (allData) {
            var dataArr = allData.split(',');
            var eachData = [];
            for (var i = 0; i < dataArr.length; i++) {
                eachData = dataArr[i].split(':');
                dataDic[eachData[0]] = eachData[1];
                eachData = [];
            }
        }
        console.log(dataDic);
    }

    function addData(key, value) {
        dataDic[key] = value;
        saveData();
    }

    function getData(key) {
        if (key in dataDic) {
            return dataDic[key];
        } else {
            return undefined;
        }
    }

    function removeData(key) {
        delete dataDic[key];
        saveData();
    }

    function saveData() {
        var dataStr = JSON.stringify(dataDic);
        dataStr = dataStr.substring(1, dataStr.length - 1) // 去掉{}
        dataStr = dataStr.replace(/"/g, ''); // 去掉"  /正则表达式/g = global = 所有的
        localStorage.setItem('mhData', dataStr);
    }





    // 自动识别CompanyCode 
    function identifyCompanyCode() {
        var text = nameBox.val(); // JE名称
        var keyArr = Object.keys(currencyMapping); // 生成一个全是key的数组
        for (var i = 0; i < keyArr.length; i++) {
            if (text.indexOf(keyArr[i]) != -1) {
                return keyArr[i];
            }
        }
        if (text.indexOf('0215') != -1) {
            return '5002';
        };
        return null;
    }



    // 自动识别postingDate
    function identifyPostingDate() {
        var period = periodBox.text(); // 格式类似：2020 11 Aug
        var year = Number(period.substring(0, 4)); // 2020 - 数字
        var monthStr = period.substring(period.length - 3, period.length); // Aug
        var month = monthMapping[monthStr]; // 8 - 数字
        var date = new Date(year, month, 0); // 当月最后一天的日期 2020-8-31
        var day = date.getDate(); // 获取日期中的日
        return year + '/' + month + '/' + day;
    }




    // 打开设置面板
    var settingFormat = true;
    var selectedTab = 0; // 当前选中的Tab

    var btnColor = showVersion == '1' ? mColor : '#fff'; // 正常情况下，按钮字的颜色
    var btnBGC = showVersion == '1' ? '#fff' : mColor;
    var btnSelectedColor = showVersion == '1' ? '#fff' : mColor; // 选中或touch时，按钮的字的颜色
    var btnSelectedBGC = showVersion == '1' ? mColor : '#fff'; // 选中或touch时，按钮的字的背景色

    function setSettingColor() {
        btnColor = showVersion == '1' ? mColor : '#fff'; // 正常情况下，按钮字的颜色
        btnBGC = showVersion == '1' ? '#fff' : mColor;
        btnSelectedColor = showVersion == '1' ? '#fff' : mColor; // 选中或touch时，按钮的字的颜色
        btnSelectedBGC = showVersion == '1' ? mColor : '#fff'; // 选中或touch时，按钮的字的背景色
    }


    function showSetting(tabIndex) {
        setSettingColor();
        // 第一次打开渲染
        if (settingFormat) {
            // 左侧按钮
            var settingTabBtn = $(".settingTabBtn");
            for (var i = 0; i < settingTabBtn.length; i++) {
                $(settingTabBtn[i]).css({
                    top: 80 + (30 + 15) * i,
                    color: btnColor,
                });
                if ($(settingTabBtn[i]).html() == "") {
                    $(settingTabBtn[i]).css("display", "none"); // 隐藏没有字的
                }
            };
            var tabLi = $(".tabLi");
            for (var ii = 0; ii < tabLi.length; ii++) {
                $(tabLi[ii]).css({
                    margin: 0,
                    padding: 0,
                    listStyle: "none",
                    fontSize: "12px",
                    height: 30,
                    lineHeight: "30px",
                });
            };
            var tabItem = $(".tabItem");
            for (var iii = 0; iii < tabItem.length; iii++) {
                $(tabItem[iii]).css({
                    marginLeft: 12,
                    height: 25,
                    lineHeight: "25px",
                });
            };
            settingFormat = false;
        }

        touchSettingTabBtn(tabIndex);
        selectSettingTabBtn(tabIndex);

        settingBox.css({
            top: (window.innerHeight - parseInt(settingBox.css("height"))) / 2 + 20,
            left: (window.innerWidth - parseInt(settingBox.css("width"))) / 2,
            display: "block",
            opacity: 0,
            position: "fixed",
        });

        cover.style.display = 'block';
        cover.style.opacity = '.3';

        let settingOpacity = showVersion == '1' ? 1 : 0.9;
        $(settingBox).animate({
            opacity: settingOpacity,
            top: (window.innerHeight - parseInt(settingBox.css("height"))) / 2,
        }, 500);

        openWindow.push('settingBox');
        mCollecOpenSetting += 1; // 记录数据
        addData('mCollecOpenSetting', mCollecOpenSetting);
    }



    function closeSetting() {
        settingBox.animate({
            opacity: 0,
            top: (window.innerHeight - 550) / 2 - 20,
        }, 500, "swing", function() { settingBox.css("display", "none"); });
        openWindow.pop()
        if (openWindow.length == 0) {
            cover.style.display = 'none';
            cover.style.opacity = '0';
        };
    }


    function touchSettingTabBtn(index) {
        setSettingColor();
        var settingTabBtn = $(".settingTabBtn");
        $(settingTabBtn[index]).css({ "color": btnSelectedColor, "background-color": btnSelectedBGC, })
    }

    function selectSettingTabBtn(index) {
        setSettingColor();
        var settingTabBtn = $(".settingTabBtn");
        var settingTab = $(".settingTab");

        $(settingTabBtn[selectedTab]).removeClass("settingTabBtnSelected");
        $(settingTabBtn[index]).addClass("settingTabBtnSelected");

        $(settingTabBtn[selectedTab]).css({
            color: btnColor,
            backgroundColor: "",
        });
        $(settingTab[selectedTab]).css({
            display: "none",
        });
        $(settingTabBtn[index]).css({
            color: btnSelectedColor,
            backgroundColor: btnSelectedBGC,
        });
        $(settingTab[index]).css({
            display: "block",
        });
        selectedTab = index;
    }

    function leaveSettingTabBtn(index) {
        setSettingColor();
        var settingTabBtn = $(".settingTabBtn");
        if (index != selectedTab) {
            // $(settingTabBtn[index]).css({ "color": btnColor, "background-color": btnBGC, })
            $(settingTabBtn[index]).css({ "color": btnColor, "background-color": "", })
        }
    }



    // 调整JE框
    function adjustTable() {
        $("#JEPrepTable th").css({
            width: 120,
        });
        $("#JEPrepTable td input").css({
            width: 120,
        });
    }



    // 显示介绍框infoBox
    var formatInfo = true;

    function showInfo() {
        if (!showInformation) { return };

        var e = window.event;
        if (formatInfo) {
            $(".infoBox").css({ padding: "30px", });
            let infoColor = showVersion == '1' ? "black" : '#fff';
            $(".info-Title").css({
                color: infoColor,
                margin: "0 0 10px 0",
            });
            formatInfo = false;
        };
        // 获得标题，填写信息
        var item = e.target.innerText; // 当前选择的项目的名称
        if (item == '') { return }; // 遇到选项框会变空
        var Introduce = '';
        // $(".infoBox-Name").text(item);
        $(".info-Title").text(item);
        if (item.search('加载页面时自动填写') != -1) {
            Introduce = '<p>允许在JEPrep页面加载时，在不点击填写按钮的情况下自动填写页面单元格的内容。</p><p>开启该选项时，建议同时开启<strong>数据保护</strong>选项（这个选项默认开启），以保护数据不被意外覆盖。</p><p><strong>推荐选项：开启</strong></p>';
        } else if (item.search('自动填写时覆盖') != -1) {
            Introduce = '<p>自动填写时，允许在页面单元格有数据的情况下，覆盖已有的内容。</p><p>这个选项有意外覆盖的风险。不过，如果开启了<strong>数据保护</strong>选项，这个功能会被无视。</p><p><strong>推荐选项：关闭</strong></p>';
        } else if (item.search('数据保护') != -1) {
            Introduce = '<p>开启这个选项时，如果当前页面单元格已有数据，将会屏蔽自动填写功能。</p><p>开启这个选项后，<strong>自动填写时覆盖</strong>选项会被无视。</p><p><strong>推荐选项：开启</strong></p>';
        } else if (item.search('显示选项介绍') != -1) {
            Introduce = '<p>这个介绍框只有在开启这个选项时才会显示。当你觉得它们碍眼时，可以关闭这个选项。</p><p><strong>推荐选项：开启</strong></p>';
        } else if (item.search('强制填写') != -1) {
            Introduce = '<p>开启自动填写后，当JE名称中找不到正确的CompanyCode时，将强制填写为上一笔JE所使用的CompanyCode（或者说是浏览器中存储的本地数据），并执行自动填写。</p><p><strong>推荐选项：开启</strong></p>';
        } else if (item.search('显示主面板') != -1) {
            Introduce = '<p>用于开启或者关闭主面板。</p>';
        } else if (item.search('加载页面时打开') != -1) {
            Introduce = '<p>允许在加载页面完成后，且当底部单元格内没有数据时，自动打开文件Trintech自带的上传面板。</p><p>注意：由于浏览器的安全机制，选择文件窗口可能需要手动打开。</p><p><strong>推荐选项：开启</strong></p>';
        }
        $(".info-Introduce").html(Introduce);

        // 显示介绍框
        if (showVersion == '1') {
            $(".infoBox").css({ opacity: 1, });
        } else if (showVersion == '2') {
            $(".infoBox").css({ opacity: 0.9, });
        }
        infoBox.css({
            top: e.pageY + 10,
            left: e.pageX - infoBox.width() - 60,
            zIndex: 9999999999,
            display: "block",
        });
    }

    function moveInfo() {
        if (!showInformation) { return };
        var e = window.event;
        infoBox.css({
            top: e.pageY + 10,
            left: e.pageX - infoBox.width() - 50,
            display: "block",
        });
    }

    function hideInfo() {
        infoBox.css("display", "none");
    }





    function hideMainBox() {
        mBox.stop().animate({
            opacity: 0,
        }, 300, "swing", function() { mBox.css("display", "none"); });
        showMain = false;
        $(".mainBoxCircle").removeClass("mCircleSelected");
        $(".showMain").prop("checked", showMain);
        addData("showMain", showMain);
    }

    function showMainBox() {
        mBox.css("display", "block");
        mBox.css("opacity", 0);
        if (showVersion == '1') { mBox.stop().animate({ opacity: 1, }, 300); } else if (showVersion == '2') { mBox.stop().animate({ opacity: 0.9, }, 300); }
        $(".mainBoxCircle").addClass("mCircleSelected");
        showMain = true;
        $(".showMain").prop("checked", showMain);
        addData("showMain", showMain);
    }


    function adjustWorkArea() {
        // 调整 JE Description 高度
        let system = companyCodeBox.length ? 'SAP' : 'non-SAP';
        if (system == 'SAP') { jeDescriptionBox.css("height", "17px") };
        // 修改左上角名字
        trintechName.css("width", "500px");
        trintechName.css("textTransform", "none");
        trintechName.text("with " + mName);
        // 修改上边Trintech颜色
        $("#menu_nav_container").css("backgroundColor", mColor);

        if (false) {

            // 去掉header
            trintechHeader.css("display", "none");
            // 缩减按钮区高度
            trintechButtonArea.css("height", "27px");
            trintechButtonUl.css("position", "absolute");
            trintechButtonUl.css("top", "133px");
            // 调整单元格区域高度
            trintechSheetArea.css("height", "175px");
        }

    }




    function autoUploadFile() {
        // 自动触发文件上传按钮
        // $("#JEPrepAttachFilesButton").trigger("click");
        // 之后自动触发New按钮
        setTimeout(function() {
            $("#BtnNewFile").trigger("click");
            fillEachBox($("#fileName"), longText);
            fillEachBox($("#fileDescription"), longText);

            let system = companyCodeBox.length ? 'SAP' : 'non-SAP';
            let allChildren = $("#JeTitle tbody tr");
            if (allChildren.length >= 4) {
                showMsg('检测到当前JE是复制品，单元格填写功能已被禁用。', false);
                return;
            } else if (system == 'non-SAP') {
                showMsg('检测到当前的Template是non-SAP。，单元格填写功能已被禁用。', false);
                return;
            }

            var upload = document.getElementById('uploadFile');
            upload.addEventListener('change', function(e) {
                var files = e.target.files;
                if (files.length == 0) return;
                var f = files[0];
                if (!/\.xlsx|\.xls$/g.test(f.name)) {
                    showMsg('必须为xlsx或xls格式的文件。', false);
                    return;
                }
                readWorkbookFromLocalFile(f, function(workbook) {
                    readWorkbook(workbook);
                });
            });
        }, 1500);
        //之后自动触发文件上传按钮
        setTimeout(function() {
            // $("#uploadFile").trigger("click"); // 点击上传文件
            $("#uploadFile").click();
            $("#uploadFile").change(function() {
                $("#BtnAddFile").trigger("click"); // 点击保存
                $(".ui-icon-closethick").trigger("click"); // 关闭窗口
                let fileName = document.getElementById('uploadFile').files[0].name;
                console.log(fileName);
            })
        }, 2000);
    }






    // Excel导入操作函数
    // Excel导入操作函数
    // Excel导入操作函数
    // Excel导入操作函数
    // Excel导入操作函数
    // Excel导入操作函数
    function selectFile() {
        var allChildren = $("#JeTitle tbody tr");
        if (allChildren.length >= 4) {
            showMsg('检测到当前JE是复制品，该功能无法使用。', false);
        } else {
            document.getElementById('file').click();
        }
    }

    // 读取本地excel文件
    function readWorkbookFromLocalFile(file, callback) {
        var reader = new FileReader();
        reader.onload = function(e) {
            var data = e.target.result;
            var workbook = XLSX.read(data, {
                type: 'binary'
            });
            if (callback) callback(workbook);
        };
        reader.readAsBinaryString(file);
    }


    function readWorkbook(workbook) {
        // var sheetNames = workbook.SheetNames; // 工作表名称集合
        // var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet
        var worksheet;
        if (typeof mJESheetIndex == 'number') {
            let sheetNames = workbook.SheetNames;
            worksheet = workbook.Sheets[sheetNames[mJESheetIndex - 1]]; // 数字是第几张sheet，需要-1
            if (!worksheet) { showMsg('找不到第' + mJESheetIndex + '张工作表。', false); }
        } else {
            worksheet = workbook.Sheets[mJESheetIndex]; // 字符就是sheet名称
            if (!worksheet) { showMsg('找不到名称为' + mJESheetIndex + '的工作表。', false); }
        }
        if (!worksheet) {
            // showMsg('找不到名称为JE的工作表。', false);
            return;
        }
        var csv = XLSX.utils.sheet_to_csv(worksheet);
        writeData(csv);
    }



    // 将数据写入单元格中
    function writeData(csv) {
        const startRow = mJEStartRow;
        const endColumn = 13; // 复制到13列-M为止



        var rows = csv.split('\n'); // 按行进行分割，返回一个数组，第n行就是rows[n-1]
        rows.pop(); // 最后一行没用的
        for (let i = 1; i < startRow; i++) {
            rows.shift(); // 删除开始行以前的元素
        }
        // 删除companyCode = 0 或者 = 空，或者金额 = 0的行
        for (let i = 0; i < rows.length; i++) {
            if (rows[i].substr(0, 1) == '0' || rows[i].substr(0, 1) == ',' || rows[i].substr(0, 1) == 0) {
                rows.splice(i, 1); // 如果这一行没用companyCode，删除这一行
                i--; // 因为删除一行以后row.length-1，导致i会跳过一列，所以这边要i--
            }
            if (!rows[i]) {
                showMsg('程序中止于[将数据写入单元格]：找不到任何符合JE格式的数据，请检查参数[mSheetIndex]是否正确。'); // 如果删光了变undefined，说明格式不对，后面split会报错。
                document.getElementById('file').value = ''; // 清空input（因为是change事件，不清空的话下次选一样的文件没效果）
                return;
            }
            let eachCell = rows[i].split(',');
            if (parseInt(eachCell[2]) == 0) {
                rows.splice(i, 1); // 如果这一行的金额为零，删除这一行
                i--; // 因为删除一行以后row.length-1，导致i会跳过一列，所以这边要i--
            }
        }




        for (let i = 0; i < rows.length; i++) {
            trs = document.querySelector('#JEPrepTable').querySelectorAll('tr'); // 每一行元素（Table）
            var trsIndex = i == 0 ? 1 : i + 2; // 应该填写在第几行，由于第二行有一个template，所以超过1就要多加1

            var cells = rows[i].split(','); // 将每一行按逗号切割为一个数组，数组中每个元素就是单元格的值
            while (cells.length > endColumn) {
                cells.pop(); // 超过复制列的单元格去掉
            }

            var tds = trs[trsIndex].querySelectorAll('td'); // 每一个单元格（Table）
            // 这个循环还是写cells.length，比endColumn小，会报错。
            for (let j = 0; j < cells.length; j++) {
                tds[j + 1].querySelector('input').value = cells[j];
            }
            if (i < rows.length - 1) JEPrepAddRemoveRowClicked(event, 'add'); // 给列表增加一行
        }



        // 删除多余的行
        // +2 是因为有一个template，有一个header
        var trs = document.querySelector('#JEPrepTable').querySelectorAll('tr'); // 每一行元素（Table）
        var trsLength = trs.length;
        var rowLength = rows.length;
        rowLength = rowLength < 1 ? 1 : rowLength; // 变成0会把Template删掉
        if (trsLength > rowLength + 2) {
            var tbody = document.querySelector('#JEPrepTable').querySelector('tbody');
            for (let i = trsLength; i > rowLength + 2; i--) {
                tbody.removeChild(tbody.childNodes[i]);
            }
        }
        updateDrCrTotals(); // 更新借贷金额
        updateDynConversionAmount(); // 不知道这个干吗的


        document.getElementById('file').value = ''; // 清空input（因为是change事件，不清空的话下次选一样的文件没效果）
        showMsg('单元格填写完成。', true);
        mCollecAutoInput += 1; // 记录数据
        addData('mCollecAutoInput', mCollecAutoInput);
    }



    // 在DOM加载完成以后执行的函数
    window.onload = function() {
        document.getElementById('file').addEventListener('change', function(e) {
            var files = e.target.files;
            if (files.length == 0) return;
            var f = files[0];
            if (!/\.xlsx|\.xls$/g.test(f.name)) {
                showMsg('必须为xlsx或xls格式的文件。', false);
                return;
            }
            readWorkbookFromLocalFile(f, function(workbook) {
                readWorkbook(workbook);
            });
        });
    };








    // 版本框操作
    // 版本框操作
    // 版本框操作
    // 版本框操作
    // 版本框操作
    // 版本框操作
    function showVersionBox(isNewVersion) {

        if (isNewVersion) {
            versionTitle.html("脚本已更新 - 当前版本：" + version);
        } else {
            versionTitle.html("版本信息");
        }

        $(versionBox).css({
            top: (window.innerHeight - parseInt(versionBox.css("height"))) / 2 + 20,
            left: (window.innerWidth - parseInt(versionBox.css("width"))) / 2,
            display: "block",
            opacity: 0,
            position: "fixed",
            zIndex: 99999999999,
        });

        cover.style.display = 'block';
        cover.style.opacity = '.3';

        let versionOpacity = showVersion == '1' ? 1 : 0.9;
        $(versionBox).animate({
            opacity: versionOpacity,
            top: (window.innerHeight - parseInt(versionBox.css("height"))) / 2,
        }, 500);


        $(versionHistortText).html(`
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄脚本2.0.1</h1>
            <p style="color:#777676;">发布日期 - 2020/10/7</p>
            <h3>更新内容</h3>
            <ul>
                <li>填写的时候同时填写JE Name（强制填写）。</li>
            </ul>
            <h3>BUG修复</h3>
            <ul>
                <li>LongText：LongText框失去焦点后会将内容保存到内存，上传File时会填写修改后的数据了。</li>
                <li>上传：上传功能在copy的JE中不会被触发了：由于copy的JE结构与新建的不同，脚本会阻止上传功能的使用，需要手动贴底部的单元格。</li>
                <li>上传：上传功能在non-SAP的JE模板也不会被触发了。</li>
            </ul>
            <br><br><br><br><br><br>
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄脚本2.0.0</h1>
            <p style="color:#777676;">发布日期 - 2020/10/6</p>
            <h2 style="font-size: 16px;color: black;">新增内容</h2>
            <ul>
                <li>
                    <h3 style="font-size: 14px">外观</h3>
                    <ul>
                        <li>脚本名称：由米黄Trintech脚本更改为米黄脚本。</li>
                        <li>应用了全新的2.0版本UI：各个窗体的背景颜色由白色更改为主题颜色，透明度由100%更改为90%，以及其他细节。如果想切换新旧版本的UI，可以在<strong>设置>外观>版本主题</strong>中进行设置。</li>
                        <li>页面窗口右侧新增三个按钮：主面板（用于关闭和打开主面板）；上传（用于填写底部单元格）；设置（由主面板移动出来）。</li>
                        <li>主面板：由于脚本会自动识别SB或Z1凭证，SB和Z1的选项已被隐藏。</li>
                        <li>主面板：为了显示新版本的操作UI，主面板的默认靠右边距由50px调整为135px。</li>
                        <li>加载完成后页面顶部元素也会有一些变化。</li>
                    </ul>
                </li>
                <li>
                    <h3 style="font-size: 14px;">功能</h3>
                    <ul>
                        <li>自动打开文件选择器：现在在加载页面，完成中间数据填写后，会自动打开文件上传功能；且如果手动点击File按钮的同时，会自动点击New按钮并填写信息，并打开文件选择器（这个可能因浏览器的安全机制而打开失败）。这个功能在<strong>设置>基本>加载页面时打开文件上传</strong>可以设置，这个功能默认是开启的。</li>
                        <li>自动填写底部单元格：在选择好文件后，底部的单元格会自动填写完成。（外部引用了SheetJS - xlsx.core.min.js文件）具体的格式需要在<strong>设置>数据>读取Excel文件</strong>中进行设置。</li>
                    </ul>
                </li>
                <li>
                    <h3 style="font-size: 14px;">设置</h3>
                    <ul>
                        <li>设置面板：将设置进行了分类，<strong>基本</strong> - 跟程序相关的选项，<strong>外观</strong> - 跟外观相关的选项。</li>
                        <li>设置面板：在<strong>设置>外观</strong>增加了对正确颜色和错误颜色的设置。</li>
                        <li>新增<strong>数据</strong>设置标签。可以设置消息框消失时间，以及上传Excel自动填写JE时的相关参数。</li>
                    </ul>
                </li>
            </ul>
            <h2 style="font-size: 16px;color: black;">更新内容</h2>
            <ul>
                <li>
                    <h3 style="font-size: 14px;">加载页面</h3>
                    <ul>
                        <li>现在在加载页面时就会自动调整Table宽高。</li>
                        <li>加载页面时，调整了JE Description的高度至17px（仅SAP模板）。</li>
                    </ul>
                </li>
                <li>
                    <h3 style="font-size: 14px;">设置面板</h3>
                    <ul>
                        <li>新增了<strong>基本>显示>显示主面板</strong>选项，由于主面板的使用频率被大大得降低，所以现在主面板可以被隐藏了。</li>
                        <li>加载页面时自动填写：这个功能由默认关闭更改为默认开启。</li>
                    </ul>
                </li>
                <li>
                    <h3 style="font-size: 14px;">数据收集</h3>
                    <ul>
                        <li>会对自动填写、清空、重置、上传、设置进行数据收集统计，以备日后做数据分析，以优化脚本。</li>
                    </ul>
                </li>
                <li>
                    <h3 style="font-size: 14px;">脚本</h3>
                    <ul>
                        <li>currencyMapping：添加了'7503-CNY'和'7508-INR'。</li>
                        <li>程序：简化了约500行累赘代码。</li>
                    </ul>
                </li>
            </ul>
            <h2 style="font-size: 16px;color: black;">BUG修复</h2>
            <ul>
                <li>
                    <h3 style="font-size: 14px;">主面板</h3>
                    <ul>
                        <li>修复了主面板移动不流畅的问题。</li>
                    </ul>
                </li>
            </ul>
            <br><br><br><br><br><br>
            ` +
            '\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.4.1</h1>\
            <p style="color:#777676;">发布日期 - 2020/9/10</p>\
            <h3>新增内容</h3>\
            <ul>\
            <li>设置面板：为每个可选选项增加浮动的介绍框。</li>\
            <li>设置面板：增加<strong>基本>程序>显示选项介绍</strong>选项，可以关闭这个选项来关闭介绍框。这个功能默认是开启的。</li>\
            <li>设置面板：增加<strong>基本>程序>强制填写</strong>选项，用于在JE名称中无法识别出正确的CompanyCode时，使用上一次JE所使用的CompanyCode强制填写。这个功能默认是开启的。</li>\
            </ul>\
            <h3>更新内容</h3>\
            <ul>\
            <li>所有的漂浮面板优化：现在所有的漂浮面板可以根据浏览器的宽度变化而动态居中。</li>\
            <li>设置面板文案修改：加载界面时自从填写 > 加载页面时自动填写</li>\
            </ul>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>自动填写：如果填写的JE名称中不包含正确的companyCode时，不再会固定修改为5002，而是修改为上一笔JE的companyCode。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.4.0</h1>\
            <p style="color:#777676;">发布日期 - 2020/9/4</p>\
            <h3>新增内容</h3>\
            <ul>\
            <li>主面板：postingDate在更新页面时，会根据选择的Period自动更新。</li>\
            <li>设置面板：增加了数据保护(protectData)变量，默认为true，改变量可以在单元格(CompanyCode/DocumentCurrency/PostingDate/JEDescription)有数据时阻止自动填写，以保护数据。</li>\
            <li>设置面板：<strong>设置面板>基本>程序</strong>中同步增加了“数据保护”设置，默认是开启的。</li>\
            <li>键盘快捷键：ESC（关闭除了主面板以外的脚本窗体）</li>\
            <li>键盘快捷键：Enter（confirmBox确认按钮的快捷键）</li>\
            </ul>\
            <h3>更新内容</h3>\
            <ul>\
            <li>自动填写：调整了样式和填写默认值的顺序，自动填写后会弹个一个提示。</li>\
            <li>自动填写：自动填写完成后去掉了background-color属性，让填写的框不再出现难看的黑边。</li>\
            <li>设置面板样式：每个可调整li元素增加左缩进12px，每个可调整元素的高度由30px调整为25px，显示得更紧凑一些。</li>\
            <li>设置面板样式：鼠标经过复选框的鼠标指针变会为小手的样式。</li>\
            <li>消息框msgBox：再次优化了消息框的显示：快速弹出消息框时不再会出现可能弹不出的情况。</li>\
            </ul>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>主面板：修复了主面板的mCheck小圆形鼠标经过时不变成小手且会被选中的问题。</li>\
            <li>自动填写：修复了一个Validate以后会自动删除ControlBox里的值的问题。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.3.1</h1>\
            <p style="color:#777676;">发布日期 - 2020/9/1</p>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>修复了存在localStorage里的字符串false在提取出来时被判断为布尔值true，导致只要第一次选择了某个设置选项后再也无法去掉的问题。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.3.0</h1>\
            <p style="color:#777676;">发布日期 - 2020/9/1</p>\
            <h3>新增内容</h3>\
            <ul>\
            <li>调整了自动填写功能，现在的自动填写会有以下不同：</li>\
            <li>自动填写时，Z1的凭证可以自动选择Reversal Period了，默认选择的是第二个选项。</li>\
            <li>自动填写时，若单元格内容为空，则会填写内容并且单元格背景会闪烁<strong style="color:#99cc66;">绿色</strong>提示；若单元格内容不为空，则不会覆盖当前内容，并会闪烁<strong style="color:#CC3333;">红色</strong>提示。这么做的目的是：避免JE在Validate之后会刷新页面，有手动修改过的部分会被程序自动覆盖，最终导致填错的风险。（自动填写时覆盖内容默认为不开启）</li>\
            <li>自动填写后，会自动调整底部Table的宽度，统一调整为120px。</li>\
            </ul>\
            <h3>更新内容</h3>\
            <ul>\
            <li>清空内容的时候，CT和Owner也会被清空了。</li>\
            <li>提示框优化：在快速操作连续弹出提示框前，增加了重置消失时间的代码。这样在多次弹出提示框时就不会出现偶尔弹不出来；以及弹出来没到时间就消失的问题。</li>\
            <li>在设置面板中增加了：<strong>基础>程序>自动填写时覆盖内容</strong>，这个功能默认是关闭的。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.2.3</h1>\
            <p style="color:#777676;">发布日期 - 2020/9/1</p>\
            <h3>更新内容</h3>\
            <ul>\
            <li>h1标签优化：调整了脚本中的h1标签英文字母全是大写的问题。</li>\
            <li>设置面板优化：优化了跟随框的初始位置。刷新页面第一次打开设置面板时，跟随框不会从下至上一闪而过了。</li>\
            </ul>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>修复了一个重置后，内存中的currency不变，导致填写的currency错误的问题。</li>\
            <li>修复了companyCode填写5018会出现错误的问题（currencyMapping5018错写成了5017）。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.2.2</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/25</p>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>修复了一个识别CompanyCode后，documentCurrency在主面板改变却没有在内存中改变，导致填写的信息currency错误的问题。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.2.1</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/24</p>\
            <h3>新增内容</h3>\
            <ul>\
            <li>现在，在加载页面时，可以自动填写信息。这个功能默认不启用，可以在<strong>设置面板>基础>程序</strong>中进行设置。</li>\
            </ul>\
            <h3>更新内容</h3>\
            <ul>\
            <li>自动识别CompanyCode：原本0215不可识别，现在可以将0215识别为5002。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech脚本1.2.0</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/24</p>\
            <h3>新增内容</h3>\
            <ul>\
            <li>程序名称由插件改为了<strong>脚本</strong>，因为这本身就属于脚本程序。</li>\
            <li>设置面板 - 基本：现在可以设置主题颜色了，并且可以存入localStorage，参数在下次打开时依然保留。</li>\
            <li>设置面板 - 关于：现在可以随时查看不同时期的版本信息了，并可以主动检查更新。</li>\
            <li>设置面板使用技巧：双击设置标签可以恢复程序默认参数。</li>\
            <li>后期会增加更多有用的参数在设置面板当中。</li>\
            </ul>\
            <h3>更新内容</h3>\
            <ul>\
            <li>在打开页面时，会自动从JE Name中识别companyCode填入主面板，并同时保存到localStorage中。（如果没有可识别的CompanyCode，将使用localStorage中的参数，如果localStorage中也没有，将使用脚本默认CompanyCode。）</li>\
            <li>JE Description在自动生成后，会被存入内存当中。因此现在重置按钮可以重置JE Description了。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech插件1.1.2</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/20</p>\
            <h3>更新内容</h3>\
            <ul>\
            <li>创建JE后，JE Description内容将自动填写为JE Name的内容。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech插件1.1.1</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/18</p>\
            <h3>更新内容</h3>\
            <ul>\
            <li>将确认框的出现和消失动画延迟响应时间由500毫秒缩短到200毫秒。</li>\
            <li>确认框确认后也会出现程序执行完成的确认框。</li>\
            </ul>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>确认框修改为jQuery语法，修复了消失动画错误的BUG。</li>\
            <li>修复了主面板无法移动的BUG。</li>\
            <li>修复了提示框水平居中位置不变的BUG。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech插件1.1.0</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/17</p>\
            <h3>更新内容</h3>\
            <ul>\
            <li>引用jQuery库，替换了部分原生JS代码，增加了动画显示的准确性。</li>\
            <li>重写localStorage数据存储逻辑，所有数据只需要保存到一个key当中 - mhData</li>\
            <li>新增版本更新框，仅在每次版本更新时自动弹出。预计未来可以在设置中重新查看。</li>\
            </ul>\
            <h3>BUG修复</h3>\
            <ul>\
            <li>修复了透明提示框挡住网页内容的BUG。</li>\
            </ul>\
            <h3>已知BUG</h3>\
            <ul>\
            <li>确认框在关闭时不能正确得显示上移的动画。</li>\
            <li>主板无法移动。</li>\
            </ul>\
            <br><br><br><br><br><br></br>\
            <h1 style="font-family:Microsoft Yahei;color:rgb(0, 0, 0);font-size:20px;text-transform:none;">米黄Trintech插件1.0.0</h1>\
            <p style="color:#777676;">发布日期 - 2020/8/11</p>\
            <h3>主要功能</h3>\
            <ul>\
            <li>填写：自动填写除借贷以外的所有数据。同时支持SAP和non-SAP</li>\
            <li>清空：自动清空除借贷以外的所有数据。同时支持SAP和non-SAP</li>\
            <li>重置：将主面板的数据初始化。</li>\
            </ul>\
            <h3>数据存储</h3>\
            <ul>\
            <li>JE相关数据会在确认填写时保存在浏览器（localStorage）之中。</li>\
            <li>JE相关的数据包含：conpanyCode，postingDate和preparerCostCenter。</li>\
            <li>还有一些设置相关的数据之后会在设置功能开放后可以使用以及保存。包含但不限于：颜色，保存移动位置，设置CC，提示框消失时间，填写清空是否提示，等等。</li>\
            </ul>\
            <h3>其他</h3>\
            <ul>\
            <li>主面板可以移动，但刷新页面后会回到原先的默认位置。将在之后的设置功能中可手动设置。</li>\
            <li>主面板的currency和reversalDate会根据conpanyCode和postingDate自动计算。</li>\
            </ul>\
            <h3>已知BUG</h3>\
            <ul>\
            <li>消息框可能会造成框框消失后，在消失前的区域鼠标无法点击到后面的内容。</li>\
            </ul>\
            ');
        openWindow.push('versionBox');
    }


    // 关闭版本框
    function closeVersionBox() {
        versionBox.animate({
            opacity: 0,
            top: (window.innerHeight - 600) / 2 - 20,
        }, 500, "swing", function() { versionBox.css("display", "none"); });
        openWindow.pop();
        if (openWindow.length == 0) {
            cover.style.display = 'none'; // 在设置里打开不需要消失
            cover.style.opacity = '0';
        }
    }




})();